2016-08-22 33 views
1

即時通訊嘗試學習如何使用WPF數據綁定。VB.NET WPF數據綁定在控制屬性(如何更新)

我有一個控件,我想改變控件中屬性的值。

<somecontrol Value="{Binding GoodRange}"> 

我創建的主窗口類的屬性,如下所示:

Public Property GoodRange As Double 
    Get 
     Return m_GoodRange 
    End Get 
    Set(value As Double) 
     m_GoodRange = value 
    End Set 
End Property 
Private m_GoodRange As Double 

裏面的主窗口類添加以下到子新()

Public Sub New() 
     InitializeComponent() 
     GoodRange = 3000 
     Me.DataContext = Me 
End Sub 

到目前爲止好,hwen我啓動程序,將值3000傳遞給控件。現在

,在運行時我想更改的屬性,例如當用戶點擊一個按鈕,或定時事件例如:

Private Sub UpdateValue() 

    GoodRange = 2800 

End Sub 

當我這樣做,在控制值不更新。即時通訊試圖瞭解我如何觸發控制更新。

我已經搜索了4個小時嘗試嘗試和理解,我發現並嘗試了很多谷歌的答案,但通常這些答案是自定義控件或自定義類或使用.datacontex方法,我不能使用多個財產將需要改變。

我會很樂意爲您提供任何幫助。

謝謝/

+3

您必須實現屬性更改通知。這通常通過實現INotifyPropertyChanged接口來完成。但請注意,在視圖類中實現此功能的情況並不常見(例如,您的MainWindow)。您通常會創建一個單獨的類來實現它,並定義綁定的源屬性。然後,將該類的一個實例分配給視圖的DataContext。這就是所謂的視圖模型。在網絡上搜索MVVM。 – Clemens

回答

0

正如克萊門斯說,在你的問題的評論,你真的需要做MVVM,其中有數據綁定作爲它的心臟和靈魂一些研究。一篇優秀的文章當然是Josh Smith的經典之作,MVVM Design Pattern

同時,作爲一個最小的功能示例,您應該創建一個類,如下所示實現INotifyPropertyChanged接口(以下代碼使用C#):

public class myViewModel : INotifyPropertyChanged 
{ 

    private double goodRange = 3000; 
    public double GoodRange 
    { 
     get 
     { 
      return goodRange; 
     } 
     set 
     { 
      if (value != goodRange) 
      { 
       goodRange = value; 
       NotifyPropertyChanged("GoodRange"); 
      } 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    public void NotifyPropertyChanged(string propertyName) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

在你的窗口後面的代碼:

Dim mVM as myViewModel 

Public Sub New() 
    InitializeComponent() 
    mVM = new myViewModel() 
    Me.DataContext = mVM 
End Sub 

Private Sub UpdateValue() 
    mVM.GoodRange = 2800 
End Sub 
+0

非常感謝Stewbob。這工作得很好,雖然我不得不稍微修改它以適應我目前複雜的程序。雖然我並沒有將其最佳做法綁定到hte視圖模型中,但我現在不得不使用它,直到我對WPF瞭解更多。我會閱讀你鏈接的文件,我appriciate你的幫助! –

+0

BTW:Public Event PropertyChanged(ByVal sender As Object,ByVal e As PropertyChangedEventArgs)實現INotifyPropertyChanged.PropertyChanged需要在轉換爲VB.net時添加 –