INotifyPropertyChanged PropertyChanged 事件保持为空

INotifyPropertyChanged PropertyChanged event remains null

我在论坛上搜索过,其他一些关于 PropertyChanged 事件的资源仍然为空,但没有找到任何解决方案。我使用 AModel、AViewModel 和 MainWindow 创建了一个示例 WPF 应用程序。 Model 和 ViewModel 已实现 INotifyPropertyChanged 接口,但在运行时检查时,两个 PropertyChanged 事件都保持为空。申请代码如下:

public class AModel : INotifyPropertyChanged
{
    public AModel()
    {

    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyname = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
        }
    }
    private string _A;
    public string A
    {
        get
        {
            return _A;
        }
        set
        {
            _A = value;
            NotifyPropertyChanged("A");
        }
    }
}

public class AViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyname = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
        }
    }
    public AViewModel()
    {
        MyList = new List<AModel>();

    }

    private List<AModel> _MyList;
    public List<AModel> MyList
    {
        get
        {
            return _MyList;
        }
        set
        {
            _MyList = value;
        }
    }


}

public partial class MainWindow : Window
{
    private AViewModel _objViewModel=new AViewModel();
    public AViewModel ObjViewModel
    {
        get
        {
            return _objViewModel;
        }
        set
        {
            _objViewModel = value;
        }
    }
    public MainWindow()
    {
        InitializeComponent();
        ObjViewModel = new AViewModel();
        DataContext = ObjViewModel;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ObjViewModel.MyList.Add(new AModel() { A = "Sample Text" });
    }
}

现在,当我向我的模型添加断点时 class PropertyChanged 事件始终为空。我已经创建了视图模型的对象并将其分配给 MainWindow 的 DataContext 但仍然为空。在这个简单的应用程序中,我无法理解我哪里出错了。我已经检查了工作正常的绑定。

提前致谢

PropertyChanged 事件在此处为空,因为 属性 实际上并未更改。您正在创建一个集合,然后将其绑定到 UI 控件。如果你想看到 属性 改变被触发,那么你可以试试这个:-

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>
        <DataGrid Margin="20" AutoGenerateColumns="True" ItemsSource="{Binding MyList}"/>
        <ListBox Grid.Row="1" ItemsSource="{Binding MyList}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button  Grid.Row="2" HorizontalAlignment="Center" Margin="20" Content="Click Me" Click="Button_Click"/>
    </Grid>

因此,当您尝试更新文本框中的项目时:-

<DataTemplate>
                    <TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>

然后您会注意到 属性 更改会在您输入文本框时立即触发:-

{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}

如果您需要更多说明,请发表评论。