我有一个DataGrid,其组合框分配有客户ID,每个客户ID可能有许多帐户ID,这些帐户ID在他们自己的组合框中分配。我想要做的就是,当用户从组合框中选择客户ID时,帐户ID随后会被选择的特定CustomerID更新。
我想我差不多有代码了。
这里我在combobox elementstyle中应用了customerId的itemsource。如您所见,当从客户框中选择一个Item时,我有一个SelectedItem属性。
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding DataContext.EntityCollection,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="Name"/>
<Setter Property="SelectedItem" Value="{Binding SelectedItem}"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
</DataGridComboBoxColumn.ElementStyle>
因此,在帐户ID的Combobox中,我不知道在哪里放置SelectedItem.AID代码......
我已将它放在第一行的SelectedValueBinding属性中,但它不起作用。我是否需要将SelectedItem放在EditingElementStyle标记内的Itemsource属性中?
<DataGridComboBoxColumn SelectedValueBinding="{Binding SelectedItem.AID}" SelectedValuePath="SID" Header="SID" Width="70">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding DataContext.EntityCollection,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="AID"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding DataContext.EntityCollection,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="AID"/>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
</DataGridComboBoxColumn.ElementStyle>
但是我可能会离开,所以任何帮助我都会感激不尽。
由于
答案 0 :(得分:0)
<Setter Property="ItemsSource" Value="{Binding DataContext.EntityCollection,
我不完全确定这是否可行,但我不建议这样使用。
将代码中的ViewModel
绑定到DataContext
的{{1}}。现在,您可以将ItemsSource绑定到ViewModel中的任何ObservableCollection属性。这可能是你的View
好吧,使用EntityCollection
时,您需要做的就是通过绑定目标属性来告诉此列数据所在的位置。
如果您的DataGridComboBoxColumn
已应用Customer
,并且您的商家名为DataGrid
,则您的商标可能如下:
ID
非常需要检查SelectedValueBinding="{Binding ID, Mode=TwoWay}"
才能传输对您的财产所做的更改。
现在,要对您的其他Mode
应用任何更改,例如添加或创建项目时,您需要使用另一个ComboBox
并将其绑定到第二个ObservableCollection
。如果您这样做,则可以在对第一个Combobox
进行任何更改时控制第二个ComboBox
的项目。
这只是一个简短的示例:
private uint _ID;
public uint ID
{
get { return _ID; }
set
{
if (_ID == value) return;
_ID = value;
NotifyOfPropertyChange("ID");
// Do something with your second ComboBox.
// You could create another ObservableCollection and bind that to your second ComboBox and add some items representing the Account IDs
}
}
不要忘记在进行更改时通知您的View
。
如果这不是您正在寻找的答案,请更具体。你的实际问题很难阅读,我只理解了第一段并解释了你如何归档你想做的事情。