WPF绑定DataGridComboBoxColumn到一个组合框的SelectedItem



我正在构建WPF(MVVM)的应用程序。用户将在ComboBox中进行选择,并且该选择应该过滤DataGridComboBoxColumn(DGCBC)中DataGrid中可用的结果。

但是我对如何将ComboBoxSelectedItem绑定到DGCBC感到茫然。我确实设法让ComboBox过滤第二个ComboBox的结果,但该逻辑似乎不能很好地转移到DGCBC。

我已经试过了:

MyComboBox:

<ComboBox
DisplayMemberPath="PropertyName1"
ItemsSource="{Binding Collection1}"
Loaded="{s:Action NameOfMethodToPopulateComboBox}"
SelectedItem="{Binding PropertyHolder, UpdateSourceTrigger=PropertyChanged}"/>

PropertyHolderComboBox中选择项目时运行,如果它不是null,它运行添加到绑定到DGCBC的ObservableCollection的方法。它看起来像这样:

private ClassName _currentSelectedItem;
public ClassName CurrentSelectedItem {
get { return this,._selectedItem; }
set { SetAndNotify(ref this._selectedItem, value);
if (value != null) {
FillDataGridComboBoxColumn();
}
}
}

方法FillDataGridComboBoxColumn()看起来像这样(缩写):

DataSet ds = new();
// Code to run stored procedure
// CurrentSelectedItem is given as parameter value
DataTable dt = new();
dt = ds.Tables[0];
MyObservableCollection.Clear();
for (int i = 0; i < dt.Rows.Count; i++) {
DataRow dr = dt.NewRow();
dr = dt.Rows[i];
HolderClass holderClass = new(); // this is the class that is bound to the observablecollection
holderClass.PropertyName = dr["PropertyName2"].ToString();
MyObservableCollection.Add(holderClass);

DataGridDataGridComboBoxColumn的XAML:

<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding MyObservableCollection}">
<DataGridComboBoxColumn
SelectedValueBinding="{Binding PropertyName2, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="PropertyName2"
DisplayMemberPath="PropertyName2"
ItemsSource="{Binding MyObservableCollection}">
/>
</DataGrid>

当我调试时,DataGridComboBoxColumn能够获得正确的行数-但它们只是空占位符;空白。如果我在代码中设置一个断点,我看到集合确实加载了正确的值,但是它们没有显示出来。

我猜我在DGCBC的绑定上做错了什么。

谢谢。

DataGridComboBoxColumnItemSource必须设置为Static Resource:

<Window.Resources>
<CollectionViewSource x:Key="MyObservableCollection" Source="{Binding MyObservableCollection}"/>
</Window.Resources>

然后在DataGridComboBoxColumn的XAML中:

<DataGridComboBoxColumn
ItemsSource="{Binding Source={StaticResource MyObservableCollection}}"
DisplayMemberPath="Property2">
</DataGridComboBoxColumn>

最新更新