2014-06-10 150 views
0

我已经成功地绑定了窗口项目以便在使用wpf数据绑定之前查看模型,几乎和我在这里完全一样。WPF数据绑定,不知道为什么它不起作用

我有一个图形用户界面和我的TextBlock绑定的XAML来更改系统状态的颜色和文本;

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

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

我真的很难过。整个绑定的东西在表面上看起来很简单,所以,从我相当新的,也许很天真的知识中,我看不出我做错了什么。

在此先感谢。 (我也改变了变量名称来伪装我的项目,所以如果在对象之间存在拼写差异,或者同样忽略它)

回答

0

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

只是为了仔细检查你可以使用像Snoop这样的工具来查看出了什么问题。

你应该在构造器

像下面来初始化您的视图模型。

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

此外,请确保您正在实施INotificationPropertyChanged。

你的属性setter应该有如下

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

谢谢你的评论,我实现了界面和移动的实例化的构造。但是,没有效果。虽然我尝试使用文本框而不是文本块,并且该视图模型参数与远程更改一起使用。虽然只有文本会随着视图模型而改变,但笔刷不会 –

+0

我很抱歉,我不确定我是否完全理解您的问题。但是我用Brush创建了一个示例项目作为属性,当我在viewmodel中更改它时,它更新了textblock的背景。我要说的一件事是你试图改变这一行中私有属性的颜色this._ANMStateColour = Brushes.White;你可以把它改成公共财产吗?像ANMSTateColour = Brushes.White,因为私有属性不会触发OnPropertyChanged,即使让UI知道它的值已被更改 – Krishna

+0

我找到了一个修复程序!我使用的语句是导入错误类型的画笔。我改变使用System.Windows.Drawing使用System.Windows.Media –

相关问题