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

更改属性时,C#XAML数据绑定无效,c#,wpf,xaml,data-binding,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"

好吧,我一直在绞尽脑汁想这件事,我错过了一些东西,我只是不知道是什么。最终,我试图设置数据绑定,以便能够更新动态显示的值,但对我来说,这是行不通的

XAML是:

<TextBox x:Name="textBox" HorizontalAlignment="Left" 
    Height="37" Margin="85,38,0,0" TextWrapping="Wrap" 
    Text="{Binding Path=TBBind}" VerticalAlignment="Top" 
    Width="121" />
帮帮我,欧比。。。。哦,等等,任何人都帮我

试试看:

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
    TBBind = "test";
}

这里的差异设置了critical
DataContext
属性。这是您在这里实现的MVVM模式的基石。您应该考虑将视图模型职责分离为另一个类,然后将视图的代码>代码DATACONTEXS/<代码>设置为该类的实例,但是您所采用的方法适用于简单的情况。

< P>假定您正在尝试使用MVVM模式(它代表模型视图View Mead):

您的主窗口是视图

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

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));
        }
    }
}
删除MainWindowViewModel类中所有与ViewModel相关的内容后,您的MainWindow代码将如下所示:

public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
    }

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

在主窗口的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
是我的WPF项目中名称空间的名称。这在你的情况下可能会有所不同。

谢谢你,我知道我错过了一些愚蠢的东西!谢谢你,我最终认为codekaizen的答案是正确的,因为它是最简单的,因为任何人都有同样的问题(尽管你的答案解释得更好)。我支持你的答案,但对15个声誉的限制:sThanks codekaizen!当我有足够的代表时,我也会回来投票,哈哈。
<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>