C# MVVM中的WPF DataGridComboxColumn绑定?
我有一个C# MVVM中的WPF DataGridComboxColumn绑定?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个DataGridComboBoxColumn绑定到我的ViewModel中的ObservableCollection。此绑定起作用,提供了ObservableCollection的下拉列表: 这是我的Xaml: <DataGrid Margin="5" AutoGenerateColumns="False" ItemsSource="{Binding MembershipsCollection}"> <DataGrid.Columns> <
DataGridComboBoxColumn
绑定到我的ViewModel中的ObservableCollection
。此绑定起作用,提供了ObservableCollection的下拉列表:
这是我的Xaml:
<DataGrid Margin="5" AutoGenerateColumns="False" ItemsSource="{Binding MembershipsCollection}">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Region" Width="SizeToHeader">
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type vm:AccountsViewModel}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="ProductCode" Binding="{Binding Path=ProductCode}" Width="SizeToHeader"/>
</DataGrid.Columns>
</DataGrid>
&我的ViewModel中的ObservableCollection。这由从构造函数调用的方法填充:
private ObservableCollection<String> _RegionShortCodeCollection;
public ObservableCollection<String> RegionShortCodeCollection
{
get { return _RegionShortCodeCollection; }
set
{
_RegionShortCodeCollection = value;
OnPropertyChanged("RegionShortCodeCollection");
}
}
private observetecollection\u region短距离收集;
公共可观测采集区域短距离采集
{
获取{return\u regionshortcollection;}
设置
{
_RegionShortCollection=值;
房地产变更(“区域短收款”);
}
}
现在我想将单元格的值绑定到数据库中的实际当前值(与图片中的PRODUCTCODE相同,这显然是空白的:
有没有办法绑定到多个具有相同列的属性?如果没有,有没有办法?希望清楚,谢谢。不确定我是否误解了你的问题,但我认为你不需要
DataGridComboBoxColumn
的样式--直接使用ItemsSource
值即可。至于你的问题,y您应该能够使用SelectedItemBinding
(或SelectedValueBinding
(如果适用),将行视图模型属性绑定到所选项目:
DataGrid的ItemsSource是什么?通常情况下,您会将组合框的SelectedItem绑定到包含此值的ItemsSource的属性。更新了问题Xaml。如果我尝试绑定到ItemSource集合中的项,则在AddNew或EditItem期间,我会得到一个“附加信息:'DeferRefresh'事务“异常…这是什么?RelativeSource={RelativeSource-AncestorType={x:Type-vm:AccountsViewModel}
为什么编辑样式绑定到不同的AncestorType?另外,DisplayMemberPath绑定对我来说似乎很奇怪。您不需要设置此属性,因为您正在将ItemsSource绑定到字符串集合……没有路径。即使您正在绑定它……它也不应该绑定到集合,而应该是字符串。谢谢@LeeO.Xaml已被编辑。仍然没有运气。尝试绑定到此集合项时,AddNew或EditItem事务“异常”期间不允许“DeferRefresh”。我可以绑定到另一个ObservableCollection没有问题……恐怕此代码的UI中没有返回任何内容。我实际上是在尝试查看单元格中的当前值单击下拉列表以获得备选选项列表,虽然这很容易,但与许多WPF/Xaml一样,它会很快变得非常详细!这是因为DataGridColumn不是可视化树的一部分,因此它无法执行类似这样的相对资源查找。因此需要ElementStyle和EditingElementStyle。
<DataGridComboBoxColumn Header="Region"
ItemsSource="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}"
SelectedItemBinding="{Binding SelectedRegionShortCode,Mode=TwoWay}"
/>