2015-07-19 68 views
0

我遇到了更新文本框中的文本问题。我得到这个主窗口:C#WPF更新属性更改文本框

<Window x:Class="TestDatabinding.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <TextBox Grid.Row="0" Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10,10,10,10"/> 
    <Button Grid.Row="1" Content="Click me" Margin="10,10,10,10" Click="Button_Click"></Button> 
    <Button Grid.Row="2" x:Name="a1" Content="ShowText" Margin="10,10,10,10" Click="a1_Click" ></Button> 
</Grid> 

现在CS-文件中查找该主窗口的样子:

using System.Windows; 
namespace TestDatabinding 
{ 
    public partial class MainWindow : Window 
    { 
     MainWindowViewModel mwvm; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      mwvm = new MainWindowViewModel(); 
      this.DataContext = mwvm; 
     } 
     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      mwvm.ChangeText(); 
      this.DataContext = mwvm; 
     } 
     private void a1_Click(object sender, RoutedEventArgs e) 
     { 
      mwvm.showText(); 
     } 
    } 
} 

最后但并非最不重要的ViewModel类:

using System.ComponentModel; 
using System.Windows; 
namespace TestDatabinding 
{ 
    class MainWindowViewModel 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 
     private string text; 
     public string Text 
     { 
      get { return this.text; } 
      set 
      { 
       this.text = value; 
       OnPropertyChanged("Text"); 
      } 
     } 
     protected void OnPropertyChanged(string name) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
        handler(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
     public void ChangeText() 
     { 
      this.Text = "Hey paadddyy"; 
     } 
     public void showText() 
     { 
      MessageBox.Show(Text); 
     } 
    } 
} 

我没有实现ICommands,因为这是一个简单的测试。 现在按钮的工作正常,但文本框文本没有得到更新。 任何建议我可以做什么?当我点击第一个按钮时,我只想显示“Hey paadddyy”。我按下第二个按钮,然后第一个消息框显示“嘿paadddyy”,但文本框的文本仍然不会更新:(

感谢您为每个提示后;)

回答

2

MainWindowViewModel没有实现INotifyPropertyChanged。它需要看起来像:

class MainWindowViewModel: INotifyPropertyChanged 

您定义的事件,但没有实现接口

0

它需要实现INotifyPropertyChanged的

我建议,如果你想要做的与通知事属性。另一个简单的方法是将Caliburn.Micro Framework应用于您的项目。

Follow this link.