VB.NET WPF数据绑定在控制属性(如何更新)
即时通讯尝试学习如何使用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方法,我不能使用多个财产将需要改变。
我会很乐意为您提供任何帮助。
谢谢/
正如克莱门斯说,在你的问题的评论,你真的需要做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
非常感谢Stewbob。这工作得很好,虽然我不得不稍微修改它以适应我目前复杂的程序。虽然我并没有将其最佳做法绑定到hte视图模型中,但我现在不得不使用它,直到我对WPF了解更多。我会阅读你链接的文件,我appriciate你的帮助! –
BTW:Public Event PropertyChanged(ByVal sender As Object,ByVal e As PropertyChangedEventArgs)实现INotifyPropertyChanged.PropertyChanged需要在转换为VB.net时添加 –
您必须实现属性更改通知。这通常通过实现INotifyPropertyChanged接口来完成。但请注意,在视图类中实现此功能的情况并不常见(例如,您的MainWindow)。您通常会创建一个单独的类来实现它,并定义绑定的源属性。然后,将该类的一个实例分配给视图的DataContext。这就是所谓的视图模型。在网络上搜索MVVM。 – Clemens