2013-07-27 81 views
0

我想要一个绑定到集合的复选框列表。所以当选择选项时,它们被添加到列表中---当选项被取消时,它们被删除。如何将枚举ItemsControl绑定到WPF中的集合?

已经尝试了很多方法,但未能解决此问题。

模型

public enum WeatherType 
{ 
    Rainy, 
    Sunny, 
    Cloudy, 
    Windy 
} 

视图模型

public class WeatherViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<WeatherType> WeatherTypes {get;set;} 
    ... 
} 

XAML

<ObjectDataProvider x:Key="weather" 
      MethodName="GetValues" 
      ObjectType="{x:Type sys:Enum}"> 
    <ObjectDataProvider.MethodParameters> 
    <x:Type TypeName="business:WeatherType" /> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

... 

<ItemsControl Grid.Row="4" 
     Grid.Column="1" 
     ItemsSource="{Binding Source={StaticResource weather}}"> 
<ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
    <StackPanel /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <CheckBox Content="{Binding}" /> 
    </StackPanel> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl> 

回答

1

声明一个视图模式l对于天气类型:

public class WeatherTypeViewModel 
{ 
    public WeatherType WeatherType { get; set; } 
    public bool IsChecked { get; set; } 
} 

更改您的视图模型是这样的:

public class WeatherViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<WeatherTypeViewModel> WeatherTypes {get;set;} 
    ... 
} 

和观点 - 这样的:

<ItemsControl Grid.Row="4" 
     Grid.Column="1" 
     ItemsSource="{Binding WeatherTypes}"> 
<ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
    <StackPanel /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <CheckBox Content="{Binding WeatherType}" IsChecked="{Binding IsChecked}"/> 
    </StackPanel> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl>