2013-07-21 4 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 в представлении и перенацелили все привязки в этом представлении на этот экземпляр View, используя строку DataContext = this;. Я считаю, что это неправильно, и вы должны больше узнать о концепциях MVVM, прежде чем продолжить.

Насколько я знаю, о рамках DevExpress MVVM, связывание, продемонстрированной в коде не будет работать во время выполнения, так как DataContext свойство этого View будет присвоен соответствующий экземпляр ViewModel при запуске приложения. Таким образом, правильный подход:

  1. Снимите DataContext = this; линию
  2. Определить свойство Имя2 на соответствующем уровне ViewModel - все привязки будет работать, как ожидалось.

Если вы все еще хотите использовать неправильный подход, но сделать это работает, используйте relative binding (но вы должны также удалить DataContext = this; линию !!!):

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

P.S. Пожалуйста, используйте DevExpress Support Center, если вы обнаружили ошибку в продуктах DevExpress или столкнулись с проблемой при ее использовании.