-1

绑定值为 Name2 的文本框不起作用。代码是正确的并且可以在一个简单的 WPF 应用程序中工作。有没有其他方法可以在 devexpress 中绑定?

在此处输入图像描述

<TextBox Height="20" TextWrapping="Wrap" Text="{Binding Path=Name2}" VerticalAlignment="Top" Margin="429,27,159,0" AcceptsReturn="True">
public partial class EntitiesView : UserControl, INotifyPropertyChanged
{
    private string _name2;
    public string Name2
    {
        get { return _name2; }
        set
        {
            _name2 = value;
            RaisePropertyChanged("Name2");
        }
    }

    public EntitiesView()
    {
        Name2 = "abcdefffffffffffff";
        DataContext = this;
        InitializeComponent();
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
4

1 回答 1

0

这个问题与 DevExpress 没有直接关系。它与常见的 MVVM 概念有关。您说您正在使用 MVVM,但是从您的代码中我看到您已经在 View 中定义了 Name2 属性,并使用该行将这个 View 中的所有绑定重新定位到这个 View 实例上DataContext = this;。我认为这是错误的方式,您应该在继续之前了解更多有关 MVVM 概念的信息。

据我了解 DevExpress MVVM 框架,在您的代码中演示的绑定在运行时将不起作用,因为DataContext此 View 的属性将在应用程序启动时分配给相应的 ViewModel 实例。因此正确的做法是:

  1. 删除DataContext = this;线
  2. 在相应的 ViewModel 级别定义 Name2 属性 - 所有绑定都将按预期工作。

如果您仍然想使用错误的方法,但要让它起作用,请使用相对绑定(但您也应该删除该DataContext = this;行!!!):

<TextBlock Text="{Binding Name2, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/>

PS如果您在 DevExpress 产品中发现问题或在使用时遇到问题,请使用DevExpress 支持中心。

于 2013-07-22T07:04:03.307 回答