如果我有一個集合綁定到n togglebuttons在一個用戶控件中的stackpanel ....我怎麼能更新底層沒有代碼背後的集合(包括檢查和未檢查事件)和完整的更新邏輯?ToggleButton binding
感謝,
U.
如果我有一個集合綁定到n togglebuttons在一個用戶控件中的stackpanel ....我怎麼能更新底層沒有代碼背後的集合(包括檢查和未檢查事件)和完整的更新邏輯?ToggleButton binding
感謝,
U.
你的問題含糊不清,但我明白爲什麼這是(商業的東西)。因此,我們只能猜測問題可能是什麼。
我會盡我所能...
這聽起來好像要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 <布爾值處理程序>。每個ToggleButton的IsChecked屬性應該綁定到BooleanWrapper的IsSelected屬性。
現在,您並未嘗試交換對象進出集合,而只是更新集合中對象的屬性值。
作爲一個側面說明,如果你只綁定到一週的日子,在我看來沒有什麼錯結合就像一個類:
class DaySelection : INotifyPropertyChanged
{
public Boolean IsMondaySelected { ... }
public Boolean IsTuesdaySelected { ... }
...
}
這應該給你沒有問題,但是這並且我可能在我的精神需求捕獲中犯了錯誤 - 請忽略它與你想要的無關。
我希望我已經有所作爲了!
爲了利用集合進行綁定,您需要查看ObservableCollection<T>
(MSDN link)。通過使用它,你應該自動訂閱你正在尋找的大部分綁定。如果您碰巧使用的是bool
以外的其他對象,則必須在您決定綁定的任何對象上實施INotifyPropertyChanged
。
我知道了,我已經這樣做了....再次,這沒有幫助沒有代碼背後的更新.......例如,如果你有ObservalbeCollection
然後我有一個具有ArrayBool的依賴屬性的對象,並且在這裏將我的togglebuttons綁定到布爾值在我的ArrayBool .....現在我不想要任何更新邏輯的事件中選中和未選中,而是我想它,以便我的集合(ArrayBool)委託和觀看集合(以及togglebuttons)並通知其他人都在改變。 感謝您的意見。 U. – urema 2010-07-21 15:31:52
您能否包含您在源集合和綁定中使用的代碼?可能只是你錯過了像NotifyOnSourceUpdated或BindsDirectlyToSource這樣的綁定屬性。 – 2010-07-21 15:53:53
非常感謝,這將是非常有用的布爾更新問題.....但是我的問題不是布爾人本身更新這很好,其集合正在更改視圖中這些更改沒有路由到設置綁定的原始集合。 例如 – urema 2010-07-22 07:12:16
Binding b = new Binding(paramName){Source = WorkItem}; b.Mode = BindingMode.TwoWay; 現在我將這個綁定設置爲包含7個togglebuttons的自定義用戶控件的依賴項屬性。 DaySelector.SetBinding(DaySelector.WeekProperty,b); 現在,當在用戶控件和視圖中更改WeekProperty依賴屬性時,WorkItem(綁定的源)的paramName不會被通知這樣的更改.......我還被告知,已選中和未選中不需要按鈕上的事件。 謝謝你。 – urema 2010-07-22 07:15:08