更改属性时,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项目中命名空间的名称。 在您的情况下,这可能会有所不同。