检测初始化更改与ComboBox中的用户更改

时间:2013-06-21 07:14:10

标签: wpf data-binding mvvm combobox

这感觉就像其中一个问题应该是非常明显的,但目前答案是我的目标。

我有一些类似于以下内容的XAML:

<CheckBox IsChecked="{Binding ShouldCopySettings}"/>
<ComboBox SelectedItem="{Binding CopySettingsFrom}"
          ItemsSource="{Binding Source={StaticResource GroupedItems}">
    <ComboBox.GroupStyle>
        <StaticResource ResourceKey="ItemGroupStyle"/>
    </ComboBox.GroupStyle>
</ComboBox>

ItemsSource使用CollectionViewSource进一步增加GroupDescriptions;我不确定这是否是一个因素。

对于具有基本实现的基础ViewModel对象,一切都表现得如预期的那样。 ShouldCopySettings属性的初始状态为false,CopySettingsFrom属性的初始状态为null。一个意外(但可以容忍)的行为是,当分配父DataContext时,组合框似乎会自动选择列表中的第一个项目,并相应地触发CopySettingsFrom属性的setter。

但是现在我想让它自动勾选复选框,如果用户从组合框中进行选择。我的第一个倾向是从ShouldCopySettings属性的setter中为CopySettingsFrom属性赋予true - 实际上这确实有效。

然而,由于上面提到的初始化问题,当最初分配DataContext时(发生在此viewmodel控件之外),这将导致勾选复选框并将ShouldCopySettings设置为true,而不管其初始状态如何数据源,这显然是不可接受的。

因此,我正在寻找一种方法来检测它是否正在初始化组合,这样我就可以避免更改复选框属性,或者更好地将它们链接起来。

1 个答案:

答案 0 :(得分:0)

我发布这个作为我自己问题的答案,因为它似乎确实有用,但我对它并不特别满意,我欢迎更好的选择。

我目前所做的是修改CopySettingsFrom setter,这样如果其自身属性的旧值为非null值,它只会将ShouldCopySettings属性设置为true。

这使得它忽略了初始组合框init,因为这是从null变为非null。由于用户操作不可能导致更改为null,因此不应再发生这种情况。