我正在使用一個有2個DataGridComboBoxColumn的Datagrid,我試圖根據第一列中選定的 "聯賽 "來更新第二列的專案源。
我的xaml:
< DataGrid Name="DataTable" ItemsSource="{Binding Data}" AutoGenerateColumns="false"/span>>
<DataGrid.Columns>
<DataGridComboBoxColumn x: Name="DataTableLeague" Header="League" DisplayMemberPath="League。 SelectedValuePath="League.Name" SelectedValueBinding="{Binding LeagueName}">
<DataGridComboBoxColumn.EditingElementStyle>/span>
<Style TargetType="{x:Type ComboBox}"/span>>
< EventSetter Event="SelectionChanged" Handler="CmbLeague_SelectionChanged" />
</Style>>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridComboBoxColumn x: Name="DataTableClub" Header="Club" DisplayMemberPath="Name" SelectedValuePath="Name" SelectedValueBinding="{Binding ClubName}"/>
</DataGrid.Columns>
</DataGrid>/span>
后面的代碼:
public Editor()
{
InitializeComponent()。
DataContext = this;
DataTableLeague.ItemsSource = Leagues。
}
private void CmbLeague_SelectionChanged(object sender, SelectionChangedEventArgs e)。
{
/ ? ??
List<League>Leagues包含List<Clubs>,只能作為一個源。該選擇被存盤在一個名為Data的ObservableCollection中。
uj5u.com熱心網友回復:
與其處理一個事件,你可以將第二個ComboBox的ItemsSource系結到你的資料物件的一個源屬性,并在LeagueName屬性的setter中設定它,該屬性被系結到第一個ComboBox的選定值。
確保你的資料物件實作了INotifyPropertyChanged介面,并且每當你為第二個ComboBox的ItemsSource屬性設定源屬性時,都會引發變化通知,例如:
public class DataItem : INotifyPropertyChanged >。
{
private string _leagueName;
public string LeagueName
{
get { return _leagueName; }
set _leagueName; }
{
_leagueName = value;
NotifyPropertyChanged();
Teams = ...;
}
}
private IEnumerable< Team> _teams;
public IEnumerable<Team> Teams
{
get { return _teams; }
set { _teams = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = ")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pertyName))。
}
XAML:
<DataGridComboBoxColumn x: Name="DataTableClub" ItemsSource="{Binding Teams}" 。 ... />
uj5u.com熱心網友回復:
雖然這個似乎是一個可靠的方法,我希望看到一個使用
CmbLeague_SelectionChanged事件的解決方案
好吧,你可以投遞給事件處理程式的ComboBox的DataContext,然后設定該屬性:
private void CmbLeague_SelectionChanged(object sender, SelectionChangedEventArgs e)。
{
ComboBox cmb = (ComboBox)sender;
if (cmb.DataContext is DataItem dataItem)
{
dataItem.Teams = .....;
}
你仍然需要在你的資料類中實作INotifyPropertyChanged。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312694.html
標籤:
