[英]C# WPF Update Textbox on Property change
我在更新文本框中的文本時遇到問題。 我得到了這個MainWindow:
<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>
現在,此MainWindow的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”。 當我按下第二個按鈕,然后第一個按鈕時,MessageBox顯示“ Hey paadddyy”,但Textbox文本未得到更新:(
謝謝你的每一個提示;)
您的MainWindowViewModel
沒有實現INotifyPropertyChanged
。 它需要看起來像這樣:
class MainWindowViewModel: INotifyPropertyChanged
您定義事件但未實現接口
它需要實現INotifyPropertyChanged
我建議,如果您想對“通知屬性”進行某些操作。 另一個簡單的方法是將Caliburn.Micro Framework應用於您的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.