WPF 将 DataGridComboBoxColumn 绑定到 ComboBox 的 SelectedItem
WPF Binding DataGridComboBoxColumn to SelectedItem of a ComboBox
我正在 WPF
(MVVM) 中构建应用程序。
用户将在 ComboBox
中进行选择,并且该选择应该在 DataGrid
.
中过滤 DataGridComboBoxColumn
(DGCBC) 中可用的结果
但是我不知道如何将 ComboBox
SelectedItem
绑定到 DGCBC。我确实设法让 ComboBox
过滤了第二个 ComboBox
的结果,但该逻辑似乎并不适用于 DGCBC 运行。
我尝试过的:
我的ComboBox
:
<ComboBox
DisplayMemberPath="PropertyName1"
ItemsSource="{Binding Collection1}"
Loaded="{s:Action NameOfMethodToPopulateComboBox}"
SelectedItem="{Binding PropertyHolder, UpdateSourceTrigger=PropertyChanged}"/>
当在 ComboBox
中选择一个项目时,PropertyHolder
是 运行,如果它不为空,它运行添加到 ObservableCollection
的方法绑定到 DGCBC。看起来像这样:
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);
这是 DataGrid
和 DataGridComboBoxColumn
的 XAML:
<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding MyObservableCollection}">
<DataGridComboBoxColumn
SelectedValueBinding="{Binding PropertyName2, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="PropertyName2"
DisplayMemberPath="PropertyName2"
ItemsSource="{Binding MyObservableCollection}">
/>
</DataGrid>
当我调试时,DataGridComboBoxColumn
能够得到正确的行数——但它们只是空的占位符;空白。如果我在代码中放置一个断点,我会看到该集合确实加载了正确的值,但它们只是没有显示。
我猜我对 DGCBC 的绑定做错了。
谢谢。
DataGridComboBoxColumn
ItemSource
必须设置为 Static Resource
:
<Window.Resources>
<CollectionViewSource x:Key="MyObservableCollection" Source="{Binding MyObservableCollection}"/>
</Window.Resources>
然后,在 XAML 中 DataGridComboBoxColumn
:
<DataGridComboBoxColumn
ItemsSource="{Binding Source={StaticResource MyObservableCollection}}"
DisplayMemberPath="Property2">
</DataGridComboBoxColumn>
我正在 WPF
(MVVM) 中构建应用程序。
用户将在 ComboBox
中进行选择,并且该选择应该在 DataGrid
.
DataGridComboBoxColumn
(DGCBC) 中可用的结果
但是我不知道如何将 ComboBox
SelectedItem
绑定到 DGCBC。我确实设法让 ComboBox
过滤了第二个 ComboBox
的结果,但该逻辑似乎并不适用于 DGCBC 运行。
我尝试过的:
我的ComboBox
:
<ComboBox
DisplayMemberPath="PropertyName1"
ItemsSource="{Binding Collection1}"
Loaded="{s:Action NameOfMethodToPopulateComboBox}"
SelectedItem="{Binding PropertyHolder, UpdateSourceTrigger=PropertyChanged}"/>
当在 ComboBox
中选择一个项目时,PropertyHolder
是 运行,如果它不为空,它运行添加到 ObservableCollection
的方法绑定到 DGCBC。看起来像这样:
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);
这是 DataGrid
和 DataGridComboBoxColumn
的 XAML:
<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding MyObservableCollection}">
<DataGridComboBoxColumn
SelectedValueBinding="{Binding PropertyName2, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="PropertyName2"
DisplayMemberPath="PropertyName2"
ItemsSource="{Binding MyObservableCollection}">
/>
</DataGrid>
当我调试时,DataGridComboBoxColumn
能够得到正确的行数——但它们只是空的占位符;空白。如果我在代码中放置一个断点,我会看到该集合确实加载了正确的值,但它们只是没有显示。
我猜我对 DGCBC 的绑定做错了。
谢谢。
DataGridComboBoxColumn
ItemSource
必须设置为 Static Resource
:
<Window.Resources>
<CollectionViewSource x:Key="MyObservableCollection" Source="{Binding MyObservableCollection}"/>
</Window.Resources>
然后,在 XAML 中 DataGridComboBoxColumn
:
<DataGridComboBoxColumn
ItemsSource="{Binding Source={StaticResource MyObservableCollection}}"
DisplayMemberPath="Property2">
</DataGridComboBoxColumn>