[英]ToggleButton binding
如果我在用户控件的堆栈面板中将Collection绑定到n个切换按钮,...如何在没有代码(包括Checked和unchecked事件)的情况下更新基础Collection,并完成更新逻辑?
谢谢,
U.
您的问题含糊不清,但我感谢这是为什么(商业用途)。 因此,我们只能猜测可能是什么问题。
我会尽力的...
听起来您想要七个ToggleButtons,每个按钮激活/停用一周中的某天。 您有7个布尔值的集合。 每个ToggleButton的IsChecked属性都绑定到集合中的布尔值。
问题是,此刻,您正在尝试更改集合中的对象,而不仅仅是更改该对象的属性。 我不知道我的ObservableCollection是否支持在某些位置进行项目的直接交换,但是WPF绑定框架很可能不支持集合中对象的直接交换。 您可以添加和删除项目,但不能在某些位置进行直接交换。
但是,您可以解决此(可能)限制。
尝试创建一个新的类,该类实现INotifyPropertyChanged,如下所示:
class BooleanWrapper : INotifyPropertyChanged
{
private Boolean isSelected;
public Boolean IsSelected
{
get { return isSelected; }
set
{
if (isSelected != value)
{
isSelected = value;
// TODO: Raise PropertyChanged event.
}
}
}
}
(如果您不熟悉INotifyPropertyChanged,则非常简单-MSDN上有很多示例。它允许绑定框架检测属性更改)
代替使用ObservableCollection <Boolean>,而要使用ObservableCollection <BooleanWrapper>。 每个ToggleButton的IsChecked属性都应绑定到BooleanWrapper的IsSelected属性。
现在,您不打算在集合中进行对象交换,而只是在集合中更新对象的属性值。
附带说明一下,如果您仅绑定到星期几,我认为绑定到类似这样的类没有错:
class DaySelection : INotifyPropertyChanged
{
public Boolean IsMondaySelected { ... }
public Boolean IsTuesdaySelected { ... }
...
}
这应该不会给您带来任何问题,但这取决于您,而且我的心理需求捕捉中可能犯了错误-如果与您想要的内容无关,请忽略。
我希望我有道理!
看一下TwoWay绑定模式。 这将允许通过UI更新基础业务对象,以及通过基础业务对象更新UI。
为了利用集合进行绑定,您需要检出ObservableCollection<T>
( MSDN链接 )。 通过使用它,您应该自动订阅要查找的大多数绑定。 但是,如果您碰巧对对象使用了bool
以外的东西,则必须在决定绑定到的任何对象上实现INotifyPropertyChanged
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.