2014-01-14 3 views
2

Databinding을 올바르게 사용하기 위해 WPF를 얻는 데 어려움을 겪고 있습니다. XAML에서 나는 가지고 다음 다음과 같은 두 가지 클래스 참조TextBox에 대한 데이터 바인딩이 작동하지 않습니다.

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

내가 그것을 일시 정지

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

나는 다음과 같은 CS 코드가 코드 및 단계를 통해 확인,하지만 응용 프로그램에서 txt_FirstName 업데이트 할 때 결코 firstName 개체를 설정하는 것 같습니다.

어디로 잘못 가고 있습니까?

답변

4

XAML 바인딩을 업데이트하고 TextBox을 사용하여 Window의 DataContext을 설정해야합니다.

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

나 자신 (윈도우)에 데이터 컨텍스트를 지정하지 않으려면, 당신이 창으로 들어오는 다른 데이터 컨텍스트가있을 수 있습니다, 당신은 XAML이를 추가 할 수 있습니다 : 다음

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

<TextBox Name="txt_FirstName" Text="{Binding ElementName=this, 
            Path=currentApplication.FirstName/> 
: 창에 어떤 이름을 부여 0
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; } 
} 
} 
: 텍스트 상자

관련 문제