我的wpf表单中有20多个复选框。我需要在某些对象中存储来自所有这些值的IsChecked
值。复选框绑定 - 什么是更好的解决方案?
我知道两种方式。
1)结合所有复选框使用依赖属性等here
2)对应在对象属性处理Clicked
事件个个
哪个溶液是较好的?是否有更好的解决方案在代码隐藏方面占用更少的空间?
我的wpf表单中有20多个复选框。我需要在某些对象中存储来自所有这些值的IsChecked
值。复选框绑定 - 什么是更好的解决方案?
我知道两种方式。
1)结合所有复选框使用依赖属性等here
2)对应在对象属性处理Clicked
事件个个
哪个溶液是较好的?是否有更好的解决方案在代码隐藏方面占用更少的空间?
肯定使用绑定
如果你的复选框都无关,且所有的地方,就需要20个不同的依赖属性绑定到你的DataContext或视图模型
如果复选框被一起如陆续或在网格中列出的一个,你可以把它们收集并绑定一个ItemsControl
他们
<ItemsControl ItemsSource="{Binding Options}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Description}"
IsChecked="{Binding IsChecked}" />
</DataTemplate>
</ItemsControl>
</ItemsControl>
您的视图模型或DataContext的将包含这样的事情:
private List<Option> options;
private List<Option> Options
{
get
{
if (options== null)
{
options = new List<Option>();
// Load Options - For example:
options.Add(new Option { Description = "Option A", IsChecked = false });
options.Add(new Option { Description = "Option B" });
options.Add(new Option { Description = "Option C", IsChecked = true});
}
return options;
}
}
和你Option
类,简直是
要存储IsChecked状态我建议遵循第一个(using binding
),最好是因为绑定允许保持UI和代码更加干净和解耦。 第二个(handling an event
)最像WinForms方法,所以我不明白为什么你应该在WPF应用程序中遵循它。
编辑:回答关于到多个属性
问题,如果要看究竟是绑定到一个视图,以及如何复选框被放置在视图。 如果你使用的是ItemsControl
容器像ListView
和每个复选框属于单行/列 - 可以将所有复选框绑定到一个单一的集合像
private IList<bool> states;
public IList<bool> States
{
get
{
return this.states;
}
set
{
this.states = value;
this.OnPropertyChanged("States");
}
}
为了给你一个具体的答案 - 分享请UI布局其中放置复选框的表单。
耶,试图更好地解释它,请,我的英语不够好。哪一个更好? –
@Andrew:看到更新的答案,基本上是第一个 - 1,第二 - 2 :)。从我的角度来看,绑定更好,只是为了存储价值 – sll
像我发布到大卫Basarab答案一样的问题... –
绑定。
原因很简单。如果您决定连接到IsChecked事件,则必须有额外的代码才能确定哪个属性指向哪个复选框。
更糟糕的情况是你有每个方法。
一旦你将它设置到复选框,你就完成了绑定。你所要做的就是将对象保存到最后。
如果你使用的是一个好的MVVM框架,你可以使用绑定而不必手动完成它们(只是将它们命名为某种约定) - 我喜欢Caliburn Micro,但是有很多好的东西。
+1 - 虽然我更喜欢使用IsSelected; IsChecked意味着对象将始终绑定到复选框(或类似的)。 –