我最终能够解决WPF ComboBox
的问题。然而,问题的原因尚不清楚。
使用ComboBox
ItemsSource
引用与DataContext
不同的SelectedValue
时出现问题。执行此操作并导航时,SelectedValue
属性设置为null
。由于某些属性在更改时包含逻辑(当字段A更改时,也更改字段B),某些逻辑执行不正确。
<ComboBox x:Name="Sector"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.SectorList}"
SelectedValuePath="Id"
SelectedValue="{Binding SectorId, Mode=TwoWay}" />
我发现了几个类似的问题(这个问题可能是最接近的问题:https://stackoverflow.com/a/5033924/3357566),但没有一个能解决我的问题。很多修复都与加载ItemsSource
和SelectedValue
的顺序有关,所以这让我走上正轨。
我没有从DataContext
到UserControl
获取RelativeSource
,而是遍历了ViewModels父项以找到SectorList,因此XAML现在如下(通知 Root 属性):
<ComboBox x:Name="Sector"
ItemsSource="{Binding Root.SectorList}"
SelectedValuePath="Id"
SelectedValue="{Binding SectorId, Mode=TwoWay}" />
有人能给我一个解释,为什么后面的代码在离开页面时没有清除SelectedValue而第一个代码没有?
修改
澄清ViewModels
:
ComboBoxes
的{{1}}列表CustomerEntryViewModel
在其他模块中重复使用)
视图的ViewModel
为DataContext
,但其第一个容器的CustomerEntryViewModel
设置为DataContext
。所以要从这里前往CustomerViewModel
,我必须转到SectorList
到DataContext
的{{1}}(第一个例子),否则我必须遍历UserControl
RelativeSource
1}}父母到顶部(第二个例子)。
问题仍然是为什么两个例子之间的行为不同。