导航

时间:2015-11-16 15:58:16

标签: c# wpf xaml mvvm combobox

我最终能够解决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),但没有一个能解决我的问题。很多修复都与加载ItemsSourceSelectedValue的顺序有关,所以这让我走上正轨。

我没有从DataContextUserControl获取RelativeSource,而是遍历了ViewModels父项以找到SectorList,因此XAML现在如下(通知 Root 属性):

<ComboBox x:Name="Sector" 
                     ItemsSource="{Binding Root.SectorList}" 
                     SelectedValuePath="Id" 
                     SelectedValue="{Binding SectorId, Mode=TwoWay}" />

有人能给我一个解释,为什么后面的代码在离开页面时没有清除SelectedValue而第一个代码没有?

修改

澄清ViewModels

的结构
  • CustomerEntryViewModel
    • SectorList(以及其他仅填充ComboBoxes的{​​{1}}列表
    • CustomerViewModel(单独CustomerEntryViewModel在其他模块中重复使用)
      • 名称
      • 地址
      • 扇区
      • ...

视图的ViewModelDataContext,但其第一个容器的CustomerEntryViewModel设置为DataContext。所以要从这里前往CustomerViewModel,我必须转到SectorListDataContext的{​​{1}}(第一个例子),否则我必须遍历UserControl RelativeSource 1}}父母到顶部(第二个例子)。

问题仍然是为什么两个例子之间的行为不同。

0 个答案:

没有答案