2013-04-17 151 views
0

我卡在一個奇怪的組合框問題。組合框不顯示更改值

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

回答

1

設置的SelectedItem結合模式雙向

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

呀,GetVaues會在這裏做的工作。

+0

我沒有任何問題綁定一個itemsource到我的組合框。 – Jaster

+0

如果您將答案更改爲:「將GetNames更改爲GetValues」,我會接受您的答案。另一方面,將Enum轉換爲字符串,反之亦然是無稽之談! – Jaster

0

這裏是我做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