2013-07-21 149 views
-1

用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)); 
     } 
    } 
} 
+0

您是否在Visual Studio的“调试输出”窗口中看到任何绑定错误? – slfan

+0

@slfan不,我不... –

+0

一切看起来都不错。但是你需要TextBox.BindingGroup用于什么?是否有可能以某种方式清除绑定? – slfan

回答

0

这个问题不仅关系到DevExpress的直接。它涉及到常见的MVVM概念。你说你使用的是MVVM,但是从你的代码中,我发现你已经在视图中定义了Name2属性,并使用DataContext = this;行将此视图中的所有绑定重定向到此View实例。我相信这是错误的方式,你应该在继续之前了解更多关于MVVM概念的知识。

据我了解的DevExpress MVVM框架,结合,在你的代码在运行时将无法正常工作证明,因为这个视图DataContext属性将被分配到当应用程序启动相应的视图模型实例。因此,正确的做法是:

  1. 取出DataContext = this;线
  2. 在相应的视图模型级别定义名称2财产 - 如预期中的所有绑定将工作。

如果你仍然想使用错误的做法,但要它的工作原理,使用relative binding(但你也应该删除DataContext = this;线!!!):

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

附:如果您在DevExpress产品中发现问题或在使用时遇到问题,请使用DevExpress Support Center