无法将enum绑定到组合框wpf mvvm

Nov*_*kov 4 c# wpf enums combobox mvvm

A已经阅读了很多关于将枚举绑定到组合框的方法.所以现在在.Net 4.5中它应该非常容易.但我的代码不起作用.真的不明白为什么.

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>
Run Code Online (Sandbox Code Playgroud)

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)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查看型号:

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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

StrategyType是枚举.我所有的都是空的下拉列表空的combox

Mik*_*son 5

您正试图绑定到私有变量,而您的枚举应该作为一个公开Property.

public IEnumerable<StrategyTypes> StrategyTypes
{
    get
    {
        return Enum.GetValues(typeof(StrategyType)).Cast<StrategyType>();
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,Discosultan已经为您解决了另一个问题.