组合框不显示更改值

问题描述:

我卡在一个奇怪的组合框问题。组合框不显示更改值

我使用的是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> 

The 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; } 
} 

我的问题:
- Initialy的组合框没有项目选择
- 当我在视图模型中,而不是视图更改值,该值不会更新组合框。

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

我错过了什么?

+0

集的构造SelectedItem绑定模式twoway – RockWorld

+0

不会改变任何内容。同时将updatesourcetrigger设置为propertychanged也无济于事。请不要猜测:) – Jaster

+0

您能否提供具有Items属性的类的详细信息(使用)? (询问不想猜)。 – RockWorld

设置的SelectedItem结合模式双向

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

呀,GetVaues会在这里做的工作。

+0

我没有任何问题绑定一个itemsource到我的组合框。 – Jaster

+0

如果您将答案更改为:“将GetNames更改为GetValues”,我会接受您的答案。另一方面,将Enum转换为字符串,反之亦然是无稽之谈! – Jaster

这里是我做MVVM

养活我用枚举值的组合框在我的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); 
      } 

     } 
+0

考虑阅读我的实际任务。我知道如何绑定组合框。 – Jaster

+0

但用这种方法,你不会有麻烦......这就是我所说的(写作) – NamedJohnny

+0

你正在做一些完全不同的事情。你有本地化的问题。你也不会更新视图模型的值.. – Jaster