单向绑定工作,双向绑定不工作

时间:2012-01-16 00:12:30

标签: c# wpf silverlight data-binding

在我的Silverlight prjoect中,我在代码中创建了一个简单的双向绑定:

这是我要绑定的属性:

public class Selection : ViewModelBase {

    private string selectedModel;

    public string SelectedModel {
        get { return selectedModel; }
        set {
            selectedModel = value;
            FirePropertyChanged("SelectedModel");
        }
    }
}

我的绑定目标是富文本框的文本属性。

我的绑定代码如下:

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);

但这不起作用。它编译但现在整个绑定似乎没有效果。不仅我无法触发ViewModel中的更改(在SelectedModel属性的Selection类中 - 当双向绑定可以正常工作时应该是效果)在更改RichTextBox的文本时,我甚至不能看到与上述代码一起工作的单向绑定!

似乎就行了

modelBinding.Path = new PropertyPath(s.SelectedModel);

是问题的根源,因为当我将s.SelectedModel设置为绑定Path属性时,modelBinding对象的Path属性似乎具有正确的值(在调试期间在runtine期间显示了对象内部 - 它是一个字符串值)但我看不到富文本框中的任何更改。

将代码恢复到单向绑定版本会立即使富文本框再次正常工作。

有人可以帮忙吗?我已经花了几个小时在这里,我真的必须抓住客户的截止日期..所以任何帮助都将受到高度赞赏:)非常感谢提前......

1 个答案:

答案 0 :(得分:1)

此:

new Binding("SelectedModel");

使用路径"SelectedModel"创建新绑定。然后你继续用这一行覆盖正确的路径:

modelBinding.Path = new PropertyPath(s.SelectedModel);

哪个不起作用; constructor reference州:

  

描述公共语言运行时(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