簡體   English   中英

單向綁定有效,兩向綁定無效

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM