2013-04-17 3 views
0

Я застрял в странной проблеме ComboBox.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; } 
} 

Моих вопросы:
- Initialy в выпадающих списках имеют ни один элемент не выбран
- при изменении значения в ViewModel вместо с точкой зрения, значение не обновляется в Наримере.

Изменение привязки ComboBox SelectedItem к TwoWay и OnPropertyChange не влияет!

Что мне не хватает?

+0

Set SelectedItem режим привязки twoway – RockWorld

+0

ничего не меняет. также не может помочь настройка updatesourcetrigger на propertychanged. пожалуйста, не догадывайтесь :) – Jaster

+0

Можете ли вы предоставить подробную информацию о классе, имеющем свойство Items (используется )? (спрашивая, как не хотят догадываться). – RockWorld

ответ

1

Набор SelectedItem режим связывания TwoWay

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

Да, GetVaues бы работу здесь.

+0

У меня нет проблем с привязкой itemsource к моим спискам. – Jaster

+0

Если вы измените свой ответ на: «измените GetNames в GetValues», я отвечу вам. С другой стороны, преобразование Enum в строку и наоборот - вздор! – Jaster

0

вот что я делать, чтобы кормить COMBOBOX со значениями перечислений с 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

Рассмотрите возможность чтения моего фактического квестов. Я знаю, как связать combobox. – Jaster

+0

но с этим методом у вас не будет проблем ... это то, что я говорил (пишет) – NamedJohnny

+0

вы делаете что-то совершенно другое. у вас проблемы с локализацией. также вы также не обновляете значение из viewmodel вообще. – Jaster

Смежные вопросы