我有一个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
setter 中的代码来做到这一点吗?就像是:
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");
}
不知道我应该怎么做。
您的视图模型应该有一个 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,但从问题来看,尚不清楚是否需要这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句