簡體   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