【问题标题】:Detecting initialisation change vs. user change in ComboBox检测 ComboBox 中的初始化更改与用户更改
【发布时间】:2013-06-21 07:14:10
【问题描述】:

这感觉像是应该非常明显的问题之一,但目前我还没有找到答案。

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

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

ItemsSource 是使用GroupDescriptionsCollectionViewSource;我不确定这是否是一个因素。

对于具有基本实现的底层 ViewModel 对象,一切都按预期运行。 ShouldCopySettings 属性的初始状态为 false,CopySettingsFrom 属性的初始状态为 null。一个意外(但可以容忍)的行为是组合框似乎在分配父 DataContext 时自动选择列表中的第一项,并相应地触发 CopySettingsFrom 属性的设置器。

但现在我想让它在用户从组合框中进行选择时自动勾选复选框。我的第一个倾向是从 CopySettingsFrom 属性的设置器中将 true 分配给 ShouldCopySettings 属性——这确实有效。

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

所以我正在寻找一种方法来检测它正在初始化组合,以便我可以避免更改复选框属性,或者寻找一种更好的方法来链接它们。

【问题讨论】:

    标签: wpf data-binding mvvm combobox


    【解决方案1】:

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

    我目前所做的是修改 CopySettingsFrom 设置器,以便它只会将 ShouldCopySettings 属性设置为 true,如果它自己的属性的旧值是非空值。

    这使它忽略了初始组合框 init,因为这是从 null 到 non-null 的变化。由于用户操作不可能导致更改为 null,因此这种情况永远不会再发生。

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2021-03-24
      • 2013-05-25
      • 2019-11-16
      相关资源
      最近更新 更多