2009-11-06 3 views
2


WPF 개념이 생생합니다. 난 그냥 텍스트 상자에 문자열을 표시하고 싶습니다. 다음 C# 코드와 XAML을 사용하여 문자열을 TextBox.Text 속성에 바인딩했습니다. C# 코드 :XAML 코드의 데이터 바인딩 단순

public partial class Window1 : Window 
{ 
    public int TmpVal; 
    public string TmpStr; 

    public Window1() 
    { 
     TmpVal = 50; 
     TmpStr = "Windows Created"; 
     InitializeComponent(); 
     this.DataContext = this; 
    } 
    private void viewButton_Click(object sender, RoutedEventArgs args) 
    { 
     TmpStr = "Button clicked"; 
    } 
} 

}

XAML : 실행에

<Window x:Class="TestWPF.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="600" Width="800" x:Name="ThisWindow"> 
<Grid> 
    <TextBox Name="txtTest1" Margin="200,0,200,200" HorizontalAlignment="Left" Height="50" Width="200" Text="{Binding TmpStr, ElementName=ThisWindow}" /> 
    <Button Name="butTest1" Click="viewButton_Click">Test123</Button> 
</Grid> 
</Window> 

(내가 클릭 이벤트를 호출해도) 나는 항상 내 텍스트 상자에 빈 텍스트를 얻을.
나는 stackoverflow 사이트를 탐색했지만 문제를 해결할 수 없었다. (많은 질문이이 문제에 가까웠다.)
간과되거나 놓친 것이 있으면 누군가가 제안 할 수 있습니까?

답변

5

데이터 바인딩은 입력란에서 작동하지 않습니다. 사용 속성 대신 :

또한
public int TmpVal {get; set;} 
public string TmpStr {get; set;} 

자동으로 데이터의 변경 사항을 적용 할 텍스트 상자를 원하는 경우가 이상적에서 INotifyPropertyChanged를 구현하거나 종속성 속성 하거나 (각 XXX 속성 에 대한 XXXChanged 이벤트를 가질 필요가있다 더 이상 작동하지 않습니다.).

<Window x:Class="WpfApplication5.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" x:Name="ThisWindow"> 
    <StackPanel> 
     <TextBox Name="txtTest1" Text="{Binding TmpStr, ElementName=ThisWindow}" /> 
     <Button Name="butTest1" Click="viewButton_Click">Test123</Button> 
    </StackPanel> 
</Window> 

그리고 뒤에있는 코드 :

public partial class Window1 : Window, INotifyPropertyChanged 
{ 
    public Window1() 
    { 
     this.TmpStr = "Windows Created"; 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public string TmpStr { get; set; } 

    public int TmpVal { get; set; } 

    private void viewButton_Click(object sender, RoutedEventArgs args) 
    { 
     this.TmpStr = "Button clicked"; 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs("TmpStr")); 
     } 
    } 
} 
+0

왜 XXXChanged 이벤트가 더 이상 작동하지 않는 이유는 무엇입니까? 이것에 대해 어디에서 읽을 수 있습니까? –

+0

제 생각에는 일부 CTP 또는 v1의 초기 베타에만 있다고 생각합니다. – bitbonk

+0

Property Setter에 'PropertyChanged'코드를 구현해야합니다. 따라서 코드에 의해 속성이 변경되면 UI가 업데이트됩니다. – ChrisF