[英]One-Way Binding works, Two-Way Binding doesn't
在我的Silverlight開發中,我正在代碼中創建一個簡單的雙向綁定:
這是我要綁定的屬性:
public class Selection : ViewModelBase {
private string selectedModel;
public string SelectedModel {
get { return selectedModel; }
set {
selectedModel = value;
FirePropertyChanged("SelectedModel");
}
}
}
我的綁定目標是富文本框的text屬性。
我的綁定代碼如下:
Selection s = getSelectionObject();
Binding modelBinding = new Binding("SelectedModel");
modelBinding.Source = s.SelectedModel;
selectorContent.usc_ModelSelector.SetBinding(GSelector.TextProperty, modelBinding);
很好! 每當Selection對象的SelectedModel屬性更改時,富文本框都會得到通知並相應地進行更新。 但是它僅是單向綁定的,我需要將它綁定到雙向。 所以我試圖通過更改上面的代碼來更改綁定模式:
Binding modelBinding = new Binding("SelectedModel");
modelBinding.Path = new PropertyPath(s.SelectedModel);
modelBinding.Source = s.SelectedModel;
modelBinding.Mode = BindingMode.TwoWay;
selectorContent.usc_ModelSelector.SetBinding(GSelector.TextProperty, modelBinding);
但這是行不通的。 它可以編譯,但是現在整個綁定似乎無效。 更改RichTextBox的文本時,不僅無法觸發ViewModel的更改(在SelectedModel屬性的Selection類中-當雙向綁定將正常工作時應該起作用),我什至不能請參閱與上述代碼配合使用的單向綁定,然后開始工作!
看來線
modelBinding.Path = new PropertyPath(s.SelectedModel);
這是問題的根源,因為當我將s.SelectedModel設置為bindings的Path屬性時,modelBinding對象的Path屬性似乎具有正確的值(調試時在runtine期間顯示了對象內部的外觀-它是字符串值),但在富文本框中看不到任何更改。
立即將代碼還原為單向綁定版本,可以使富文本框再次正常工作。
有人可以幫忙嗎? 我已經花了幾個小時了,我真的必須趕上客戶的截止日期..因此,任何幫助將不勝感激:)預先感謝...
這個:
new Binding("SelectedModel");
用路徑"SelectedModel"
創建一個新的綁定。 然后,您繼續使用此行覆蓋正確的路徑:
modelBinding.Path = new PropertyPath(s.SelectedModel);
這是行不通的; 構造函數參考指出:
屬性路徑,它描述了公共語言運行時(CLR)屬性的路徑,或者是單個依賴項屬性。
因此,請使用字符串或對DP的引用。
無論如何,我認為您根本不需要該行,因為您已經在綁定構造函數中正確設置了路徑。
編輯:您的來源有誤!
源應該是包含屬性的對象,這里是s
。
Binding modelBinding = new Binding("SelectedModel");
modelBinding.Source = s;
modelBinding.Mode = BindingMode.TwoWay; // This might be optional depending on the default mode of the target property
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.