更新复选框列表

罗克尔

我有一个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复选框的 ,并将适当的月份添加monthsselectedMonths. 我该怎么做?我可以只用monthChecksetter 中的代码来做到这一点吗?就像是:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章