更改属性时,C#XAML数据绑定无效
好吧,我一直在为这个问题大肆渲染我的脑子,我错过了一些东西,我无法弄清楚是什么。 最终我正在尝试设置数据绑定,以便我可以更新值,以便在运行中显示,但对于我的生活,它不起作用。
XAML是:
请注意,我设置了{Binding Path=TBBind}
。
背后的代码是:
using System.ComponentModel; using System.Windows; namespace Databinding_Practice_2 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window, INotifyPropertyChanged { public MainWindow() { InitializeComponent(); TBBind = "test"; } private string _tBBind; public string TBBind { get { return _tBBind; } set { if (value != _tBBind) { _tBBind = value; OnPropertyChanged("TBBind"); } } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string property) { MessageBox.Show("OnPropertyChanged triggered"); if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(property)); } } } }
帮帮我……哦等等,帮帮我吧!
尝试:
public MainWindow() { InitializeComponent(); DataContext = this; TBBind = "test"; }
这里的区别设置了关键的DataContext
属性。 这是MVVM模式的基石,您在此处实现。 您应该考虑将View Model责任分离到另一个类,然后将View的DataContext
设置为该类的实例,但您在此处采用的方法适用于简单的情况。
假设您正在尝试使用MVVM模式(代表Model-View-ViewModel):
您的MainWindow是视图。
您应该创建另一个类作为View Model,如下所示:
public class MainWindowViewModel : INotifyPropertyChanged { public MainWindowViewModel() { TBBind = "test"; } private string _tBBind; public string TBBind { get { return _tBBind; } set { if (value != _tBBind) { _tBBind = value; OnPropertyChanged("TBBind"); } } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string property) { MessageBox.Show("OnPropertyChanged triggered"); if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(property)); } } }
在将所有ViewModel相关内容移除到MainWindowViewModel类后,您的MainWindow代码将变为这样:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } }
现在,您应该将View与ViewModel链接,有很多方法可以做到这一点。 这是其中之一:
在MainWindow的XAML中,在Window
元素中包含以下内容:
请注意, WpfApplication5
是我的WPF项目中命名空间的名称。 在您的情况下,这可能会有所不同。