2013-07-27 2 views
0

Я хочу иметь список флажков, которые привязываются к коллекции. Поэтому, когда параметры выбраны, они добавляются в список --- когда параметры не выбраны, они удаляются.Как связать перечисление ItemsControl с коллекцией в WPF?

Пробовал несколько подходов, но не смог решить эту проблему.

Модель

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

ViewModel

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

Объявляет режим просмотра л для типа погоды:

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> 
Смежные вопросы