WPF数据绑定,不知道为什么它不工作

本文关键字:工作 为什么 不知道 数据绑定 WPF | 更新日期: 2023-09-27 18:08:07

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

我有一个带有XAML的GUI,用于我的TextBlock绑定,以改变系统状态的颜色和文本;

<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}"/>

我将数据上下文设置为我的视图模型在我的xaml.cs;

MobilityWelcomeViewModel mobilityWelcomeViewModel = new mobilityWelcomeViewModel();
public MobilityWelcome()
{
    InitializeComponent();
    this.DataContext = this.mobilityWelcomeViewModel;
}

我有这个构造函数,它通过指定的适配器写入我的数据模型;

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 { }
}

我有后台工作人员,我可以看到在调试中改变这些值。

我真的被难住了。从表面上看,整个绑定似乎很简单,所以,从我对它的新认识来看,我不知道我做错了什么。

提前感谢。(我也改变了变量名称来掩饰我的项目,所以如果有类似的对象之间的拼写差异或同样只是忽略它)

WPF数据绑定,不知道为什么它不工作

我认为你正在设置数据上下文,但没有在正确的地方初始化你的ViewModel。

为了仔细检查,你可以使用像Snoop这样的工具来查看哪里出了问题。

你应该在构造函数

中初始化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");
            }
    }
相关文章: