WPF INotifyPropertyChanged未更新标签
我目前正在学习WPF的一些基础知识,我已经寻找了大约2天的错误。希望你们能帮忙 我试图通过使用INotifyPropertyChanged和XAML中的绑定来更新我的UI(在本例中是标签的内容)。问题是:它只接受第一个值并将其放入内容中。此外,除了触发事件(OnPropertyChanged)外,什么也不会发生 这是我在XAML中的内容:WPF INotifyPropertyChanged未更新标签,wpf,vb.net,xaml,inotifypropertychanged,Wpf,Vb.net,Xaml,Inotifypropertychanged,我目前正在学习WPF的一些基础知识,我已经寻找了大约2天的错误。希望你们能帮忙 我试图通过使用INotifyPropertyChanged和XAML中的绑定来更新我的UI(在本例中是标签的内容)。问题是:它只接受第一个值并将其放入内容中。此外,除了触发事件(OnPropertyChanged)外,什么也不会发生 这是我在XAML中的内容: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1" x:Class="MainWindow"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:View x:Key="ViewModel"/>
</Window.Resources>
<Grid Margin="0,0,2,-4" DataContext="{Binding Source={StaticResource ViewModel}}">
....
<Label x:Name="lbl_money" Grid.ColumnSpan="2" Content="{Binding Path=PropMoney}" HorizontalAlignment="Left" Margin="403,42,0,0" VerticalAlignment="Top">
最后但并非最不重要的是MainWindow类,我在其中实例化了我的视图:
Class MainWindow
Private view As New View
Sub New()
InitializeComponent()
End Sub
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
view.SelfClicked()
End Sub
End Class
所以我的mycurrentMoney每次点击都会增加,事件会被触发,但标签不会更新
提前谢谢你 您的
OnPropertyChanged(“mycurrentMoney”)
语句不会对您的财产引发财产变更,因为它被称为PropMoney
您必须在setter中设置
OnPropertyChanged(“PropMoney”)
。您的OnPropertyChanged(“mycurrentMoney”)
语句不会对您的属性进行更改,因为它被称为PropMoney
您必须在setter中设置
OnPropertyChanged(“PropMoney”)
。如果您有Visual Studio 15,请使用NameOf运算符而不是字符串文字,如下所示:
NameOf(PropMoney);
如果以后重命名属性,它仍将与字符串文字相反,而字符串文字则不会。或者,修改OnPropertyChange以使用CallerMemberName
OnPropertyChange ([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")
{
}
将填写属性名称,但这仅适用于当前属性的setter
另外,为整个窗口()设置DataContext
DataContext={StaticResource ViewModel}
并且在绑定中不使用路径,只要{Binding PropertyName}
如果您有Visual Studio 15,请使用NameOf操作符而不是字符串文本,如下所示:
NameOf(PropMoney);
如果以后重命名属性,它仍将与字符串文字相反,而字符串文字则不会。或者,修改OnPropertyChange以使用CallerMemberName
OnPropertyChange ([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")
{
}
将填写属性名称,但这仅适用于当前属性的setter
另外,为整个窗口()设置DataContext
DataContext={StaticResource ViewModel}
并且在绑定中不使用路径,只需{Binding PropertyName}
代码有两个问题
首先,为backing字段引发PropertyChanged
事件,并应为property name引发该事件
OnPropertyChanged("PropMoney")
其次,您更改的属性属于视图
的不同实例,然后是设置为数据上下文
的实例。因此,在XAML中删除DataContext
更改,只保留属性绑定
<Window ...>
<Grid Margin="0,0,2,-4">
<!-- .... -->
<Label ... Content="{Binding Path=PropMoney}">
您的代码有两个问题 首先,为backing字段引发
PropertyChanged
事件,并应为property name引发该事件
OnPropertyChanged("PropMoney")
其次,您更改的属性属于视图
的不同实例,然后是设置为数据上下文
的实例。因此,在XAML中删除DataContext
更改,只保留属性绑定
<Window ...>
<Grid Margin="0,0,2,-4">
<!-- .... -->
<Label ... Content="{Binding Path=PropMoney}">
使用
OnPropertyChanged(“PropMoney”)
instedi执行了,但不幸的是没有效果使用OnPropertyChanged(“PropMoney”)
instedi执行了,但不幸的是没有效果我必须在哪里插入/替换(PropMoney)的名称?而不是在OnPropertyChange方法调用中插入/替换(PropMoney)的名称。我必须在哪里插入/替换(PropMoney)的名称?而不是OnPropertyChange方法调用中的“PropMoney”。