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

时间:2014-06-10 08:52:12

标签: c# wpf xaml data-binding textblock

在使用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中将datacontext设置为我的视图模型;

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

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

我真的很难过。整个绑定的东西在表面看起来很简单,所以从我相当新的,可能是天真的,对它的了解,我看不出我做错了什么。

提前致谢。 (我也改变了变量名来伪装我的项目,所以如果在类似对象之间存在拼写错误,或者同样只是忽略它)

1 个答案:

答案 0 :(得分:0)

我认为您正在设置datacontext但未在正确的位置初始化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");
            }
    }