我有一个list<Month> months
,其中包含12个对象,它们的名称字符串具有月份的名称(例如januari),还有一个list<Month> selectedMonths
,我想添加到该月份中由用户选中一个复选框,并在未选中该复选框时将其删除。
在XAML中,我有:
<StackPanel>
<CheckBox IsChecked="{Binding monthCheck}" Content="Januari"/>
<CheckBox IsChecked="{Binding monthCheck}" Content="Februari"/>
[etc...]
<CheckBox IsChecked="{Binding monthCheck}" Content="November"/>
<CheckBox IsChecked="{Binding monthCheck}" Content="December"/>
</StackPanel>
现在在我的视图模型中,我有:
private bool _monthCheck;
public bool monthCheck{
get{ return _monthCheck; }
set{
_monthCheck = value;
OnPropertyChanged("maandCheck");
}
现在,如果我单击任何一个复选框,则所有12个复选框都将随着我单击的复选框而发生变化(可以理解,它们都绑定到同一个bool);我希望当我勾选一个框时,它会选中复选框Content
,并将相应的月份从months
添加到selectedMonths
。
我该怎么办?
我可以仅使用monthCheck
设置器中的代码来执行此操作吗?像这样:
set{
_montcheck = value;
if(value){
somehow get Content
select month with name = content from months
selectedMonths.add(thatMonth)
only check the appropriate box
}
if(!value){
somehow get Content
select month with that name
selectedMonths.remove(thatMonth)
only uncheck the appropriate box
}
OnPropertyChanged("maandCheck");
}
不确定我该怎么做。
答案 0 :(得分:1)
您的视图模型应该具有一个Month对象的集合,视图中的ItemsControl可以绑定到这些对象:
<ItemsControl ItemsSource="{Binding Months}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
视图模型,其方法返回选定的月份:
public class Month
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
public class ViewModel
{
public List<Month> Months { get; } = new List<Month>
{
new Month { Name="January" },
new Month { Name="February" },
new Month { Name="March" },
new Month { Name="April" },
new Month { Name="May" },
new Month { Name="June" },
new Month { Name="July" },
new Month { Name="August" },
new Month { Name="September" },
new Month { Name="October" },
new Month { Name="November" },
new Month { Name="December" },
};
public IEnumerable<Month> SelectedMonths
{
get { return Months.Where(m => m.IsSelected); }
}
}
此示例缺少一种机制,该机制实际上向UI通知了选定月份的集合的更改,但是从这个问题尚不清楚这是否是必需的。