Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF INotifyPropertyChanged未更新标签_Wpf_Vb.net_Xaml_Inotifypropertychanged - Fatal编程技术网

WPF INotifyPropertyChanged未更新标签

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

我目前正在学习WPF的一些基础知识,我已经寻找了大约2天的错误。希望你们能帮忙

我试图通过使用INotifyPropertyChanged和XAML中的绑定来更新我的UI(在本例中是标签的内容)。问题是:它只接受第一个值并将其放入内容中。此外,除了触发事件(OnPropertyChanged)外,什么也不会发生

这是我在XAML中的内容:

<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”。