C# WPF数据绑定,不知道为什么它不是';行不通

C# WPF数据绑定,不知道为什么它不是';行不通,c#,wpf,xaml,data-binding,textblock,C#,Wpf,Xaml,Data Binding,Textblock,在使用wpf数据绑定之前,我已经成功地将窗口项绑定到视图模型,几乎与我在这里所做的完全相同 我有一个带有XAML的GUI,用于我的文本块绑定,以根据系统状态更改颜色和文本 <TextBlock HorizontalAlignment="Left" Margin="200,359,0,0" TextWrapping="Wrap" Text="{Binding Path=StateText, Mode=TwoWay, UpdateSourceTrigger=Property

在使用wpf数据绑定之前,我已经成功地将窗口项绑定到视图模型,几乎与我在这里所做的完全相同

我有一个带有XAML的GUI,用于我的文本块绑定,以根据系统状态更改颜色和文本

<TextBlock 
    HorizontalAlignment="Left" Margin="200,359,0,0" TextWrapping="Wrap" 
    Text="{Binding Path=StateText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    VerticalAlignment="Top" Width="565" Height="84" 
    Background="{Binding Path=StateColour, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
我有一个构造函数,它通过指定的适配器写入我的数据模型

public class MobilityWelcomeViewModel
{
    private bool State;
    private string _Text;
    private Brush _StateColour;
    BackgroundWorker StateWorker = new BackgroundWorker();
}

public ShellEMobilityWelcomeViewModel()
{
    this._ANMStateColour = Brushes.White;
    this.ANMStateWorker.DoWork += this.ANMStateWorker_DoWork;
    this.ANMStateWorker.RunWorkerCompleted += this.ANMStateWorker_RunWorkerCompleted;
    this.ANMStateWorker.RunWorkerAsync();
    this._ANMText = "Loading ANM State";

    IApplicationPointAdapter testWrite = AdapterFactory.Instance.GetApplicationPointAdapter();
        testWrite.WriteBinary("HMI.EV.SITE1.STATUS.CONTACTBREAKEROPEN", false);

}
在我的视图模型中,我具有属性

public Brush StateColour
{
    get { return this._StateColour; }
    set { this._StateColour = value; }
}

public string StateText
{
    get { return this._Text; }
    set { }
}
我有后台工作人员,可以在调试中看到这些值的更改

我真的被难住了。从表面上看,整个绑定过程似乎非常简单,因此,从我对它相当新而且可能很幼稚的了解来看,我看不出我做错了什么


提前谢谢。(我还更改了变量名以隐藏我的项目,因此如果类似对象之间存在拼写差异,或者干脆忽略它)

我认为您正在设置datacontext,但没有在正确的位置初始化ViewModel

只要仔细检查一下,你就可以使用Snoop之类的工具来查看出了什么问题

您应该在Constructor中初始化ViewModel

如下图所示

public MobilityWelcome()
    {
        InitializeComponent();
        mobilityWelcomeViewModel = new mobilityWelcomeViewModel();
        this.DataContext = this.mobilityWelcomeViewModel;
    }
还要确保您正在实现INotificationPropertyChanged

您的属性设置器应该如下所示

public Brush StateColour
    {
        get { return this._StateColour; }
        set { this._StateColour = value; 
              OnPropertyChanged("StateColour");
            }
    }

感谢您的评论,我实现了接口并将实例化移动到构造函数中。然而,没有任何效果。尽管我尝试使用文本框而不是文本块,并且可以远程更改视图模型参数。虽然只有文本会随着视图模型而改变,但画笔不会。对不起,我不确定我是否完全理解您的问题。但是我创建了一个以笔刷作为属性的示例项目,当我在viewmodel中更改文本块时,它会更新文本块的背景。我要说的一件事是,你试图改变这一行中私有财产的颜色;你能把它换成公共财产吗。像ANMSTateColour=Bruss.White,因为私有属性不会激发PropertyChanged,甚至不会让UI知道其值已更改。我找到了一个修复程序!我的using语句导入了错误类型的笔刷。我将使用System.Windows.Drawing更改为使用System.Windows。Media@Krishna“私有财产不会对PropertyChanged开火”不是真的。它是否触发更改通知完全取决于setter方法的实现。也许您的意思是私有属性不能用作绑定的源。@MarkCorrigan您通常不应该在WPF应用程序中使用任何WinForms内容。从项目中删除对System.Drawing程序集的引用。
public Brush StateColour
    {
        get { return this._StateColour; }
        set { this._StateColour = value; 
              OnPropertyChanged("StateColour");
            }
    }