首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ToggleButton结合

ToggleButton结合
EN

Stack Overflow用户
提问于 2010-07-21 14:07:31
回答 3查看 1.1K关注 0票数 0

如果在usercontrol....how中的堆栈面板中有一个绑定到n个切换按钮的集合,那么我可以在没有代码的情况下更新基础集合(包括选中和未检查的事件)并完成更新逻辑吗?

谢谢,

U。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-21 19:04:22

你的问题含糊不清,但我理解为什么是(商业的东西)。因此,我们只能猜测问题可能是什么。

我会尽最大努力..。

听起来你想要7个ToggleButtons,每个按钮激活/停用一周中的一天。您有7个布尔值的集合。每个ToggleButton的IsChecked属性绑定到集合中的一个布尔值。

问题是,目前,您正在尝试更改集合中的对象,而不仅仅是该对象的一个属性。我不知道我的ObservableCollection是否支持在特定位置上直接交换项,但是WPF绑定框架肯定不支持集合中对象的直接交换。您可以添加和删除项目,但不能在某些位置进行直接交换。

但是,您可以绕过这个(可能的)限制。

尝试创建一个实现如下INotifyPropertyChanged的新类:

代码语言:javascript
运行
复制
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属性。

现在,您没有尝试交换集合中的对象,您只是在更新集合中对象的属性值。

另外,如果您只绑定到一周中的几天,我认为绑定到这样的类没有什么问题:

代码语言:javascript
运行
复制
class DaySelection : INotifyPropertyChanged
{
  public Boolean IsMondaySelected { ... }
  public Boolean IsTuesdaySelected { ... }
  ...
}

这应该不会给你带来任何问题,但这取决于你,而且我可能在我的精神需求捕获中犯了错误--如果它与你想要的不相关,请忽略它。

我希望我说得通了!

票数 3
EN

Stack Overflow用户

发布于 2010-07-21 14:39:07

查看TwoWay绑定模式。这将允许UI更新底层业务对象,也允许底层业务对象更新UI。

票数 0
EN

Stack Overflow用户

发布于 2010-07-21 15:22:31

为了利用集合进行绑定,您需要签出ObservableCollection<T> (MSDN链路)。通过使用它,您应该自动订阅您要查找的大部分绑定。但是,如果您碰巧在对象中使用了bool以外的其他东西,那么您必须在您决定绑定到的任何对象上实现INotifyPropertyChanged

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3300108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档