2016-08-22 2 views
1

im пытается узнать, как использовать привязку данных WPF.VB.NET привязка данных WPF к свойству управления (как обновить)

У меня есть элемент управления, и я хочу изменить значение свойства f в элементе управления.

<somecontrol Value="{Binding GoodRange}"> 

Я создал свойство в MainWindow класса следующим образом:

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 

Внутри класса MainWindow я добавил следующее к югу от New()

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

До сих пор так хорошо , hwen i запускает программу, значение 3000 передается в элемент управления.

Теперь, во время выполнения я хочу, чтобы изменить свойство, например, когда пользователь нажимает на кнопку, или приурочено событие, например:

Private Sub UpdateValue() 

    GoodRange = 2800 

End Sub 

Когда я сделать это, значение на контроле не обновлено. im пытается понять, как я могу запустить элемент управления для обновления.

У меня есть googled в течение 4 часов, попробуйте и поймите, и я нашел и попробовал много ответов на google, но обычно эти ответы предназначены для пользовательских элементов управления или пользовательских классов или с использованием метода .datacontex, который я не могу использовать как необходимо изменить несколько свойств.

Я бы с радостью предоставил вам любую помощь.

Спасибо/

+3

Вы должны реализовать уведомления об изменении свойства. Обычно это делается путем реализации интерфейса INotifyPropertyChanged. Обратите внимание, однако, что это необычно реализовать в классе вида (например, в MainWindow). Обычно вы создаете отдельный класс, который его реализует, и который определяет исходные свойства привязок. Затем вы назначаете экземпляр этого класса в DataContext вашего представления. Это то, что называется моделью представления. Поиск в Интернете для MVVM. – Clemens

ответ

0

Как говорит Клеменс в комментарии к вашему вопросу, вы действительно должны сделать некоторые исследования по MVVM, который имеет привязки данных, как ее сердце и душу. Отличная статья для начала - это, конечно, классика от Джоша Смита, 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 view, это то, что я должен буду использовать до сих пор, пока не узнаю больше о WPF. Я прочитаю документ, который вы связали, и я приложу вашу помощь! –

+0

BTW: Открытое событие PropertyChanged (отправитель ByVal как объект, ByVal e As PropertyChangedEventArgs) Реализовывает INotifyPropertyChanged.PropertyChanged необходимо добавить whenconvertting на VB.net –

Смежные вопросы