2014-01-14 5 views
2

У меня возникли трудности с тем, чтобы мой WPF правильно использовал Databinding. В XAML у меня есть следующие:DataBinding для TextBox не работает

.... 
<TextBox Name="txt_FirstName" Text="{Binding Path=currentApplication.FirstName, UpdateSourceTrigger=PropertyChanged}" /> 
.... 

У меня есть следующий код CS:

namespace WPF1 
{ 
    public partial class MainWindow : Window 
    { 
    personalApp currentApplication = new personalApp(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    } 
} 

, который ссылается на следующие два класса:

class personalApp : INotifyPropertyChanged 
{ 
    private Person person = new Person(); 

    public string FirstName 
    { 
    get { return person.FirstName; } 
    set 
    { 
     person.FirstName = value; 
     this.OnPropertyChanged("FirstName"); 
    } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    void OnPropertyChanged(string propName) 
    { 
    if (this.PropertyChanged != null) 
     this.PropertyChanged(
     this, new PropertyChangedEventArgs(propName)); 
    } 

} 

class Person 
{ 
    private string firstName = ""; 

    get { return firstName; } 
    set { FirstName = value; } 
} 

я паузу в кода и выполнить проверку, но когда я обновляю txt_FirstName в приложении, он никогда не задает объект firstName.

Куда я иду не так?

ответ

4

Необходимо установить привязку XAML и установить DataContext окна с помощью TextBox.

namespace WPF1 
{ 
    public partial class MainWindow : Window 
    { 
    personalApp currentApplication = new personalApp(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = currentApplication; 
    } 
    } 
} 

Обновление XAML:

<TextBox Name="txt_FirstName" Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" /> 
-1

Что вы имеете в виду под "обновить в txt_FirstName в приложении"?
Если установить непосредственно значение текстового поля, то вы должны попытаться установить значение currentApplication вместо значения текстового поля

0
public MainWindow() 
{ 
    DataContext = this; 
    InitializeComponent(); 
} 

или если вы не хотите, чтобы назначить контекст данных для себя (окна), как вы могли бы иметь другие DataContext, приходящие в окно, вы можете добавить это в XAML: обеспечивает окно имя:

<Window .... x:Name="this"... 

затем

<TextBox Name="txt_FirstName" Text="{Binding ElementName=this, 
            Path=currentApplication.FirstName/> 
1

Я скорректировал код.

Для текстового поля:

<TextBox Name="txt_FirstName" Height="30" Background="Beige" 
      Text="{Binding Path=FirstName, UpdateSourceTrigger=PropertyChanged}" /> 

C# Код

namespace Wpf1 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new personalApp(); 
    } 
} 

internal class personalApp : INotifyPropertyChanged 
{ 
    private Person person = new Person(); 

    public string FirstName 
    { 
     get { return person.FirstName; } 
     set 
     { 
      person.FirstName = value; 
      this.OnPropertyChanged("FirstName"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propName) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(
      this, new PropertyChangedEventArgs(propName)); 
    } 
} 

internal class Person 
{ 
    public string FirstName { get; set; } 
} 
} 
Смежные вопросы