绑定不起作用

时间:2013-07-21 10:22:27

标签: c# .net devexpress devexpress-windows-ui

使用Name2值绑定文本框不起作用。代码是正确的,适用于简单的WPF应用程序。在devexpress中还有其他任何方法可以绑定吗?

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

据我所知,DevExpress MVVM框架,代码中演示的绑定在运行时不起作用,因为此View DataContext属性将被分配给相应的ViewModel实例申请开始。因此,正确的方法是:

  1. 删除DataContext = this;
  2. 在相应的ViewModel级别定义Name2属性 - 所有绑定都将按预期工作。
  3. 如果您仍想使用错误的方法,但要使其有效,请使用relative binding(但您还应删除DataContext = this;行!!!)

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

    P.S。如果您在DevExpress产品中发现问题或在使用时遇到问题,请使用DevExpress Support Center