2014-06-10 84 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 –

相關問題