我有这个代码将前端的datagrid绑定到视图模型中的elementDetail属性。 elementDetail被定义为我自己的INotifyPropertyChanged类的一个实例。但是为什么PropertyChanged句柄总是为空?它是将数据表绑定到数据网格的正确方法吗?数据网格应该响应对数据表的更改?
调试WPF程序的最佳方法是什么?对于绑定,我打开了diag:PresentationTraceSources.TraceLevel = High,但它提供的信息不是很多。
XAML
<Grid Name="myGrid" Background="#FFF3FF76">
<DataGrid Name="detailGrid"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10,57,0,0"
Width="Auto"
Height="56"
Background="#FFFFDF9F"
ItemsSource="{Binding elementDetail, Mode=OneWay,UpdateSourceTrigger=PropertyChanged, diag:PresentationTraceSources.TraceLevel=High}" />
</Grid>
代码.xaml
this.myGrid.DataContext = myViewModelInstance;
在我的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,如下所示
<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}" />
现在工作正常。有没有办法调试绑定或是否有任何绑定的一般规则?我发现WPF目前面临的主要问题是绑定错误。
答案 0 :(得分:1)
我认为你应该写: -
private DataTable _data;
public DataTable data
{
get
{
return _data;
}
set
{
_data = value;
onChanged("data");
}
}