Cant bind enum to combobox wpf mvvm

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

A have read a lot of method about the ways of binding enum to combobox. So now in .Net 4.5 it should be pretty ease. But my code dont work. Dont really understand why.

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 backend

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

View Model:

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 is enum. All i have got it is empty dropdown list

回答1:

You are trying to bind to a private variable, instead, your enum should be exposed as a Property.

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

Also, Discosultan has already solved another problem for you.



回答2:

Simplest way to bind any enum data to combobox in wpf XAML: Add data provider in window or user control resource

xmlns:pro="clr-namespace:TestProject">

<UserControl.Resources>     <ObjectDataProvider x:Key="getDataFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">         <ObjectDataProvider.MethodParameters>             <x:Type TypeName="pro:YourEnumName"/>         </ObjectDataProvider.MethodParameters>     </ObjectDataProvider> </UserControl.Resources> <!--ComboBox xaml:--> <ComboBox ItemsSource="{Binding Source={StaticResource getDataFromEnum}}"/>


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!