【发布时间】:2021-11-01 10:50:00
【问题描述】:
我最近才开始学习,所以这是一个新手问题。 也许有人可以帮助我解决我必须做的不同的事情才能让我的代码正常工作。
简而言之:我有一个继承自 INotifyPropertyChanged 的类(我试图根据 MSDN 实现)。当我按下一个按钮时,我想更改这个类中的一个变量,这反过来应该引发一个 PropertyChanged 事件。当引发事件时,应该执行一些代码。
我的 ValueChanged 类:
public class ValueChange : INotifyPropertyChanged
{
public ValueChange()
{
_size = 1;
}
private int _size;
public int Size
{
get
{
return _size;
}
set
{
_size = value;
OnPropertyRaised("Size");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyRaised([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
我的事件监听器:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ValueChange test = new ValueChange();
test.Size = 10;
}
private void PropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case "Size":
// txtbox is just some textbox in my UI
txtbox.Text = "some text";
// This is merely a placeholder as I´d like to be able to execute any code in here
break;
}
}
}
【问题讨论】:
-
当该类是控件的
DataContext,并且其中一个属性绑定到视图模型时,将在值更改时调用绑定的setter。你可以在那个 setter 中有代码。 -
如果您不想使用我之前评论中的 MVVM 模式,您可以通过将
test设为类级别字段而不是局部变量并附加事件处理程序来修复当前代码在构造函数中使用test.PropertyChanged += PropertyChanged;。请记住,随着您的应用程序变得越来越复杂,这将变得非常难以管理。