2015-06-05 2 views
2

A прочитал много методов о способах привязки перечисления к combobox. Так что теперь в .Net 4.5 это должно быть довольно легко. Но мой код не работает. Не понимаю, почему.Cant bind enum to combobox wpf mvvm

XAML:

<Window x:Class="SmartTrader.Windows.SyncOfflineDataWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="SyncOfflineDataWindow" Height="300" Width="300"> 
<Grid> 
    <StackPanel> 
     <ComboBox ItemsSource="{Binding StrategyTypes}" SelectedItem="{Binding StrategyType}" /> 
     <Button Width="150" Margin="5" Padding="5" Click="Button_Click">Save</Button> 
    </StackPanel> 
</Grid> 

xaml.cs бакэнду

namespace SmartTrader.Windows 
{ 
    /// <summary> 
    /// Interaction logic for SyncOfflineDataWindow.xaml 
    /// </summary> 
    public partial class SyncOfflineDataWindow : Window 
    { 
     public SyncOfflineDataWindow(IPosition position, ContractType type) 
     { 
      DataContext = new ObservablePosition(position); 
      InitializeComponent(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 

     } 
    } 
} 

вид Модель:

namespace SmartTrader.Entity 
{ 
    public class ObservablePosition : NotifyPropertyChanged, IPosition 
    { 
     public IEnumerable<StrategyType> StrategyTypes = 
      Enum.GetValues(typeof (StrategyType)).Cast<StrategyType>(); 

     public ObservablePosition(IPosition position) 
     { 
      Strategy = position.Strategy; 
     } 


     private StrategyType _strategyType = StrategyType.None; 
     public StrategyType Strategy 
     { 
      get { return _strategyType; } 
      set 
      { 
       _strategyType = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 
} 

StrategyType это перечисление. Все я получил его в список пуст выпадающий empty combox

+1

'{Binding StrategyType}' - должно ли оно быть {{Стратегия привязки} '? –

+0

что он сказал :) ... вы привязываетесь к неправильному свойству (ну, вы действительно привязываетесь к частному полю, чего вы не можете сделать). Я уверен, что вы получаете какую-то ошибку привязки на своей выходной консоли, которую игнорируете :) – Noctis

+0

@Novikov. Это работает для вас? Для меня Он заполняет поле со списком, но изменение выбранного значения в поле со списком не изменяется (в вашем случае) «Стратегия». Добавили ли вы дополнительные вещи к этому? –

ответ

4

Вы пытаетесь привязать к частной переменной, вместо этого, ваше перечисление должно быть разоблачено как Property.

public IEnumerable<StrategyTypes> StrategyTypes 
{ 
    get 
    { 
     return Enum.GetValues(typeof(StrategyType)).Cast<StrategyType>(); 
    } 
} 

Кроме того, Discosultan уже решил для вас еще одну проблему.