繁体   English   中英

ToggleButton绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM