我正在研究这个问题大约一天了。
由于某种原因,如果值位于ItemsControl内,我无法TwoWay将其绑定到ComboBox。外面工作很好。
我有一个int的ObservableCollection?在我的ViewModel中:
private ObservableCollection<int?> _sorterExitsSettings = new ObservableCollection<int?>();
public ObservableCollection<int?> SorterExitsSettings
{
get { return _sorterExitsSettings; }
set
{
if (_sorterExitsSettings != value)
{
_sorterExitsSettings = value;
RaisePropertyChanged("SorterExitsSettings");
}
}
}
我的XAML:
<ItemsControl ItemsSource="{Binding SorterExitsSettings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.ScanRouter.Stores}"
SelectedValue="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="name" SelectedValuePath="id" IsEditable="True" />
</DataTemplate>
</ItemsControl.ItemTemplate>
因此ComboBox中填充了一个商店列表。到目前为止,它运行良好。
ObservableCollection SorterExitSettings甚至设置了一些值,这些值显示在显示的ComboBox中。因此,设置SelectedValue也有效。
但是,当我更改选择时,排序器退出设置不会更改。而当我在没有ItemsControl的情况下实现ComboBoxes(100)时,它突然工作得很好。
<ComboBox ItemsSource="{Binding ScanRouter.Stores}" DisplayMemberPath="name" SelectedValuePath="id" IsEditable="True" SelectedValue="{Binding SorterExitsSettings[0], Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
当我使用ItemsControl和上面显示的示例ComboBox实现ComboBox时,效果更好。当我更改单个ComboBox的值时,它将更改ItemsControl中ComboBox值,但不会更改其他方式。
以前有人遇到过这个问题吗?
我的猜测是ItemsControl不喜欢我将所选值绑定到列表中的项这一事实。然而,当我直接绑定到ViewModel属性(Store)时,它也不起作用。
我还尝试使用SelctedItem代替SelectedValue,并用Store对象代替int?填充ObservableCollection?。