2013-07-27 2 views
0

Je veux avoir une liste de cases à cocher qui se lient à une collection. Ainsi, lorsque les options sont sélectionnées, elles sont ajoutées à la liste --- lorsque les options sont désélectionnées, elles sont supprimées.Comment lier un enum ItemsControl à une collection dans WPF?

J'ai essayé un certain nombre d'approches, mais je n'ai pas réussi à résoudre ce problème.

Modèle

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> 

Répondre

1

Déclarer un mode d'affichage l pour le type météo:

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

Changez votre modèle de vue comme celui-ci:

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

et vue - comme ceci:

<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> 
Questions connexes