WPF:使用WCF将TextBox Text绑定到Property的子元素?

时间:2014-11-06 13:33:49

标签: c# wpf xaml mvvm

我有一个TextBox,我试图绑定到一个表属性的元素' regimeAlias'是我用实体框架映射的tbRegimes表的列:

<TextBox Text="{Binding NewRegime.regimeAlias, Mode=TwoWay}"/>

我的ViewModel中的暴露属性:

private tbRegime _NewRegime;
public tbRegime NewRegime
{
    get { return _NewRegime; }
    set
    {
        _NewRegime = value;
        OnPropertyChanged("NewRegime");
    }
}  

最后,这里是WCF服务参考自动生成的代码类:

public partial class tbRegime : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

//blah blah blah

[System.Runtime.Serialization.DataMemberAttribute()]
public string regimeAlias {
    get {
        return this.regimeAliasField;
    }
    set {
        if ((object.ReferenceEquals(this.regimeAliasField, value) != true)) {
            this.regimeAliasField = value;
            this.RaisePropertyChanged("regimeAlias");
        }
    }
}

安装员永远不会受到打击。这是因为NewRegime对象中的每个元素都需要引发PropertyChanged,如果是这样,是否有一个简单的解决方法而不向我的代码添加更多DTO图层?

1 个答案:

答案 0 :(得分:1)

Edit3:使用您的政权阿里亚斯代码中的帖子。我必须说你的绑定应该有效。但是当然如果你想调试你必须在你的政权阿里亚斯制定者中设置断点


<TextBox Text="{Binding NewRegime.regimeAlias, Mode=TwoWay}"/>

此代码表示您绑定到班级 tbRegime 中的 Public Property regimeAlias 。 你的NewRegime的setter永远不会命中,因为你不会绑定它。

所以检查你的tbRegime类属性setter for regimeAlias。

编辑:TextBox的DataContext当然是一个公共属性NewRegime的对象,但就像我说的,如果你在绑定中使用点符号,最后一个属性是你绑定的属性:)

编辑:你没有太多办法解决方法:)如果你像你一样让绑定,你需要一个带有公共属性regimeAlias的模型,它应该实现INotifyPropertyChanged。

如果你想包装政权阿里亚斯财产那么你有问题,你必须在正确的点上提高OnPropertyChanged(“MyRegimeAlias”)。

public string MyRegimeAlias
{
    get { return _NewRegime.regimeAlias; }
    set
    {
        _NewRegime.regimeAlias = value;
        OnPropertyChanged("MyRegimeAlias");
    }
}

xaml

<TextBox Text="{Binding MyRegimeAlias, Mode=TwoWay}"/>