C# WPF DataGrid组合框SelectedItem属性设置器
我正在寻找一个如何在WPF数据网格中的组合框内使用SelectedItem属性的示例,我有C# WPF DataGrid组合框SelectedItem属性设置器,c#,wpf,xaml,datagrid,combobox,C#,Wpf,Xaml,Datagrid,Combobox,我正在寻找一个如何在WPF数据网格中的组合框内使用SelectedItem属性的示例,我有 <DataGridComboBoxColumn SelectedValueBinding="{Binding CID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" SelectedValuePath="CID" Header="CID"
<DataGridComboBoxColumn SelectedValueBinding="{Binding CID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedValuePath="CID"
Header="CID"
Width="70">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.ListCustomerCollection,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="Name"/>
<Setter Property="SelectedItem" Value="{Binding DataContext.Customer, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"></Setter>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.ListCustomerCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="Name"/>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="SelectedItem" Value="{Binding DataContext.Customer, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"></Setter>
</Style>
</DataGridComboBoxColumn.ElementStyle>
那么如何编写XAML以使用SelectedItem设置上述属性呢?如果属性位于窗口的ViewModel中,则必须像获取ItemsSource一样获取窗口的DataContext
<Setter Property="SelectedItem"
Value="{Binding DataContext.Customer,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
您是否设置了SelectedValue
、SelectedItem
或SelectedIndex
属性集DisplayMemberPath
仅设置用于在组合框中显示项目的值,而不用于所选项目Hi Rachel,我将发布上面的所有XAML,谢谢,它将是SelectedItem,但是,由于这会导致问题,我不介意选择组合的SelectedValue,我只需要值backHi Rohit,属性现在已设置,谢谢,但值不再显示在组合框中(出现错误)我已经发布了上述XAML的其余部分,因为我收集了其中的其他代码,如果您已经有了SelectedValueBinding
为什么还需要SelectedItem
?事实上,您已经解决了这个问题,我已经将上面的代码放在EditingElementStyle标记中,并且答对了!我明白你的意思,但我无法访问ViewModel中的SelectedValueBinding,我该怎么做?实际上,问题是你不能将SelectedValue
和SelectedItem
绑定到两个完全不同的属性CID
属性驻留在模型中,那么您需要的任何代码都应该存在于模型中。为什么您的ViewModel需要了解它?如果您仍然需要它,您必须以某种方式获取DataGrid选定行并获取其模型,从中可以获取CID
值。
private Customer m_Customer = null;
public Customer Customer
{
get { return m_Customer; }
set
{
m_Customer = value;
OnPropertyChanged("Customer");
}
}
<Setter Property="SelectedItem"
Value="{Binding DataContext.Customer,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>