WPF DataGrid绑定未响应PropertyChanged
我有以下代码将前端的datagrid绑定到视图模型中的elementDetail属性。elementDetail被定义为我自己的INotifyPropertyChanged类的实例。但是为什么PropertyChanged句柄总是空的呢?将datatable绑定到datagrid并且datagrid应该响应datatable的更改,这是正确的方法吗 调试WPF程序的最佳方法是什么?对于绑定,我打开了diag:PresentationTraceSources.TraceLevel=High,但它提供的信息并不多 XAML 在我的ViewModel中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,但它提
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;
}
编辑:回答我的问题
它现在运转良好。是否有调试绑定的方法,或者是否有要绑定的一般规则?我发现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");
}
}