如果在usercontrol....how中的堆栈面板中有一个绑定到n个切换按钮的集合,那么我可以在没有代码的情况下更新基础集合(包括选中和未检查的事件)并完成更新逻辑吗?
谢谢,
U。
发布于 2010-07-21 19:04:22
你的问题含糊不清,但我理解为什么是(商业的东西)。因此,我们只能猜测问题可能是什么。
我会尽最大努力..。
听起来你想要7个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,不如使用一个ObservableCollection。每个IsChecked属性都应该绑定到BooleanWrapper的IsSelected属性。
现在,您没有尝试交换集合中的对象,您只是在更新集合中对象的属性值。
另外,如果您只绑定到一周中的几天,我认为绑定到这样的类没有什么问题:
class DaySelection : INotifyPropertyChanged
{
public Boolean IsMondaySelected { ... }
public Boolean IsTuesdaySelected { ... }
...
}这应该不会给你带来任何问题,但这取决于你,而且我可能在我的精神需求捕获中犯了错误--如果它与你想要的不相关,请忽略它。
我希望我说得通了!
发布于 2010-07-21 14:39:07
查看TwoWay绑定模式。这将允许UI更新底层业务对象,也允许底层业务对象更新UI。
发布于 2010-07-21 15:22:31
为了利用集合进行绑定,您需要签出ObservableCollection<T> (MSDN链路)。通过使用它,您应该自动订阅您要查找的大部分绑定。但是,如果您碰巧在对象中使用了bool以外的其他东西,那么您必须在您决定绑定到的任何对象上实现INotifyPropertyChanged。
https://stackoverflow.com/questions/3300108
复制相似问题