WPF DataGrid绑定未响应PropertyChanged

WPF DataGrid绑定未响应PropertyChanged,wpf,binding,datagrid,datatable,Wpf,Binding,Datagrid,Datatable,我有以下代码将前端的datagrid绑定到视图模型中的elementDetail属性。elementDetail被定义为我自己的INotifyPropertyChanged类的实例。但是为什么PropertyChanged句柄总是空的呢?将datatable绑定到datagrid并且datagrid应该响应datatable的更改,这是正确的方法吗 调试WPF程序的最佳方法是什么?对于绑定,我打开了diag:PresentationTraceSources.TraceLevel=High,但它提

我有以下代码将前端的datagrid绑定到视图模型中的elementDetail属性。elementDetail被定义为我自己的INotifyPropertyChanged类的实例。但是为什么PropertyChanged句柄总是空的呢?将datatable绑定到datagrid并且datagrid应该响应datatable的更改,这是正确的方法吗

调试WPF程序的最佳方法是什么?对于绑定,我打开了diag:PresentationTraceSources.TraceLevel=High,但它提供的信息并不多

XAML

在我的ViewModel中

public ObservableDataView elementDetail
{
    get;
    set;
}
修改数据表

 elementDetail.data = dt;
我在这里定义了INotifyPropertyChanged类

public class ObservableDataView : INotifyPropertyChanged 
{
    private string _propertyName;
    public ObservableDataView(string propertyName)
    {
        _propertyName = propertyName;
    }

    private DataTable _data;
    public DataTable data
    {
        get{ return _data; }
        set
        {
            _data = value;
            onChanged(_propertyName);
        }
    }

    public void onChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
            PropertyChanged(this, e);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
编辑:回答我的问题

  • 我应该说onChange(“数据”)

  • 我还应该做的是在我的绑定中添加.data,如下所示

  • 
    


    它现在运转良好。是否有调试绑定的方法,或者是否有要绑定的一般规则?我发现WPF目前面临的主要问题是绑定错误。

    我认为您应该写:-

    private DataTable _data;
        public DataTable data
        {
            get
            {
                return _data;
            }
            set
            {
                _data = value;
                onChanged("data");
            }
        }
    

    是的,这部分是正确的,我还必须在.xaml文件中的绑定中添加.data。为什么不使用Snoop(工具)调试xaml部分,它将告诉您有关控件绑定的所有信息
    public class ObservableDataView : INotifyPropertyChanged 
    {
        private string _propertyName;
        public ObservableDataView(string propertyName)
        {
            _propertyName = propertyName;
        }
    
        private DataTable _data;
        public DataTable data
        {
            get{ return _data; }
            set
            {
                _data = value;
                onChanged(_propertyName);
            }
        }
    
        public void onChanged(String propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
                PropertyChanged(this, e);
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    }
    
    <DataGrid Name="detailGrid" HorizontalAlignment="Left" VerticalAlignment="Top"    Margin="10,57,0,0" Width="Auto" Height="56" Background="#FFFFDF9F" ItemsSource="{Binding elementDetail.data, Mode=OneWay,UpdateSourceTrigger=PropertyChanged, diag:PresentationTraceSources.TraceLevel=High}" />
    
    private DataTable _data;
        public DataTable data
        {
            get
            {
                return _data;
            }
            set
            {
                _data = value;
                onChanged("data");
            }
        }