更改属性时,C#XAML数据绑定无效

时间:2015-09-22 22:19:53

标签: c# wpf xaml data-binding

好吧,我一直在为这个问题扯掉我的大脑,我错过了一些东西,我只是弄清楚是什么。最终我正在尝试设置数据绑定,以便我可以更新值,以便在运行中显示,但对于我的生活,它不起作用。

XAML是:

<TextBox x:Name="textBox" HorizontalAlignment="Left" 
    Height="37" Margin="85,38,0,0" TextWrapping="Wrap" 
    Text="{Binding Path=TBBind}" VerticalAlignment="Top" 
    Width="121" />

请注意,我设置了{Binding Path=TBBind}

背后的代码是:

using System.ComponentModel;
using System.Windows;

namespace Databinding_Practice_2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    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));
            }
        }
    }
}

请帮助我......哦等等,帮助我任何人!

2 个答案:

答案 0 :(得分:2)

假设您正在尝试使用MVVM模式(代表Model-View-ViewModel):

您的MainWindow是视图。

您应该创建另一个类作为视图模型,如下所示:

public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
    }

}

在将所有ViewModel相关内容移除到MainWindowViewModel类之后,您的MainWindow代码将变为这样:

Window

现在,您应该将View与ViewModel链接,有很多方法可以做到这一点。这是其中之一:

在MainWindow的XAML中,在<Window.DataContext> <wpfApplication5:MainWindowViewModel /> </Window.DataContext> <Grid> <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="37" Margin="85,38,0,0" TextWrapping="Wrap" Text="{Binding TBBind}" VerticalAlignment="Top" Width="121" /> </Grid> 元素中包含以下内容:

WpfApplication5

请注意{{1}}是我的WPF项目中命名空间的名称。在您的情况下,这可能会有所不同。

答案 1 :(得分:1)

尝试:

DataContext

此处的区别设置了关键DataContext属性。这是MVVM模式的基石,您将在此处实现。您应该考虑将View Model责任分离到另一个类,然后将View的if (typeof videojs != 'undefined' ) { videojs("my_player").ready(function () { my_player.on("loadedmetadata",function(){ ... my_player.play(); } } } 设置为该类的实例,但您在此处采用的方法适用于简单的情况。