如何防止组合框值发生变化

时间:2015-03-25 09:24:43

标签: c# wpf xaml mvvm combobox

说,我有一个带有以下声明的组合框:

<ComboBox x:Name="cbBaseClass" 
    ItemsSource="{Binding AvailableBaseClasses}" 
    SelectedItem="{Binding InheritGuid, Mode=TwoWay}" 
    Style="{DynamicResource ContentClassComboBox}" />

当用户改变价值时,在某些情况下,我问他,他是否真的想这样做。当他选择&#34; no&#34;时,我没有改变底层视图模型中的值。但无论如何,ComboBox中的值都会发生变化(尽管它现在与viewmodel不同步)。

ViewModel中的属性声明如下:

    public ContentClassInfo InheritGuid {

        get {

            var info = //Get data
            return info;
        }
        set
        {
            SetInheritGuid(value);
        }
    }

<小时/> 编辑: SetInheritGuid的来源:

private void SetInheritGuid(ContentClassInfo value)
{
    // ...
    // Irrelevant part
    // ...

    if (removedInheritedProps.Count > 0)
    {
        if (
            editorDispatcher.Show(
                "(...) Are you sure?",
                button: MessageBoxButton.YesNo, icon: MessageBoxImage.Warning) == MessageBoxResult.Yes)
        {
            // ...
            // Prepare for change
            // ...
        }
        else
        {
            OnPropertyChanged("InheritGuid");
            return;
        }
    }

    contentClass.InheritGuid.Value = value.ContentClass;
    OnPropertyChanged("InheritGuid");

    // ...
    // Irrelevant
    // ...
}

<小时/> 修改: Proof-of-concept application

  1. 选择任何值并回答&#34;是&#34; - 价值将被更改
  2. 选择任何其他值并回答&#34;否&#34; - 无论如何都会改变价值
  3. 如何防止ComboBox的值发生变化?

0 个答案:

没有答案