2012-07-21 162 views
2

我有一個將TextBox內容綁定到另一個類中的屬性的兩種方法的問題。搜索stackoverflow給了很多技巧/解決方案,但似乎沒有工作。TextBox.Text綁定到ViewModel的屬性

在我的XAML代碼我有:

< TextBox ... Width="336" IsReadOnly="True" 
Text="{Binding Path=AssignedClearProgram, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

(...我刪除了所有非重要的項目)

在老毛病CS代碼,我有:

public CombiWindow(Combi combi) 
{ 
    ViewModel = new CombiViewModel(combi); 
    DataContext = ViewModel; 
} 

在CombiViewModel:

[UsedImplicitly] 
    public string AssignedClearProgram { get; set; } 

看起來,我第一次分配AssignedClearProgram時,文本框中填充了我設置的文本,但是在顯示窗口並從代碼更新AssignedClearProgram(即,設置方法被調用),數據不會在屏幕上更新。

有沒有人有解決方案來更新此變量時更改文本框?

親切的問候,

米歇爾

+0

爲什麼綁定模式twoway?我原以爲沒有從視圖中輸入...... – pgee70 2015-10-01 11:36:12

+0

也許一種方式綁定也可以(但對於回答問題無關緊要)。 – 2015-10-03 11:35:09

回答

5

你的視圖模型類需要實現INotifyPropertyChanged的,你需要,只要你改變的財產,以提高該接口的事件。然後綁定會發現更改並更新文本框。

+0

謝謝,我忘了告訴我已經使用INotifyPropertyChanged,但我忘記了在set方法中添加OnPropertyChanged調用。非常感謝你! – 2012-07-21 22:06:41

+1

最好的辦法就是放入物業二傳手,並檢查提價之前實際發生的價值變化。 – BlackWasp 2012-07-21 22:09:45

2

您的視圖模型類應實現INotifyPropertyChanged接口。然後

你的財產將如下所示:

private string assignedClearProgram; 

public string AssignedClearProgram 
{ 
    get { return assignedClearProgram; } 
    set 
    { 
     if (assignedClearProgram != value) 
     { 
      assignedClearProgram = value; 

      // Notify property has changed here using PropertyChanged event from INotifyPropertyChanged. 
     } 
    } 
} 

閱讀this文章中如何實現INotifyPropertyChanged接口,並利用其PropertyChanged事件的例子。

+0

謝謝,但我真的得到它的工作;順便說一句,我真的需要顯式調用OnPropertyChanged事件(不知道你是否在這裏,而不是//Notify ...行,但爲鏈接+1。 – 2012-07-21 22:10:43

+0

是的,我做了,我只是沒有知道你將如何實施它,從而留下評論。 – Bernard 2012-07-21 22:12:15

相關問題