首页 文章

Combobox不显示变化的值

提问于
浏览
0

我陷入了一个奇怪的ComboBox问题 .

我使用ObjectDataProvider来提供组合框:

<ObjectDataProvider x:Key="foo" 
                    MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:FooEnum" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

现在我有一个类看起来像这样:

public class SomeClass : NotifyHelper
{
    private FooEnum _value;

    public FooEnum Value
    {
        get { return _value; }
        set
        {
            _value = value;
            OnPropertyChanged("Value");
        }
    }
}

SomeClass的集合绑定到带有组合框模板的ItemsControl

<ItemsControl ItemsSource="{Binding Items}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding Source={StaticResource foo}}" SelectedItem="{Binding Value}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

ViewModel:

public class VM : NotifyHelper
{
    public VM ()
    {
        Items = new List<SomeClass>();
        Items.Add(new SomeClass{Value = Foo.X});
    }

    public List<SomeClass> Items {get; private set; }
}

我的问题:

  • 最初组合框没有选择项目
  • 当我在视图中更改视图模型中的值时,组合框中的值不会更新 .

将ComboBox SelectedItem的绑定更改为TwoWay和OnPropertyChange没有任何影响!

我错过了什么?

2 回答

  • 1

    设置SelectedItem绑定模式twoway

    SelectedItem="{Binding Value, Mode=TwoWay}"
    

    是的,GetVaues会在这里完成这项工作 .

  • 0

    这是我用COMVM为comboBox提供枚举值的方法

    在我的ViewModel的构造函数中,我有这个,我将我的值(字符串)放在资源文件中

    private ObservableCollection<WritableKeyValuePair<int, string>> _traceDisplayList = null;
    private WritableKeyValuePair<int, string> _selectedTraceType = new WritableKeyValuePair<int, string>();
    
    
    public OptionsFilterViewModel()
    {
           _traceDisplayList = new ObservableCollection<WritableKeyValuePair<int, string>>();
           _traceDisplayList.Add(new WritableKeyValuePair<int, string>((int)TraceDisplayEnum.All, ProjectResources.All));
           _traceDisplayList.Add(new WritableKeyValuePair<int, string>((int)TraceDisplayEnum.WithEx, ProjectResources.TraceException));
           _traceDisplayList.Add(new WritableKeyValuePair<int, string>((int)TraceDisplayEnum.ExOnly, ProjectResources.ExceptionOnly));
    
    }
    
        /// <summary>
            /// Listes des types de traces
            /// </summary>
            public ObservableCollection<WritableKeyValuePair<int, string>> TraceDisplayList
            {
              get { return _traceDisplayList; }
              set
              {
                _traceDisplayList = value;
                RaisePropertyChanged<OptionsFilterViewModel>(x => x.TraceDisplayList);
              }
            }
    
            /// <summary>
            /// Type de trace sélectionné dans la liste
            /// </summary>
            public WritableKeyValuePair<int, string> SelectedTraceType
            {
              get
              {
                return _selectedTraceType;
              }
              set
              {
                _selectedTraceType = value;
                RaisePropertyChanged<OptionsFilterViewModel>(x => x.SelectedTraceType);
              }
    
            }
    

相关问题