WPF DataGrid绑定没有响应PropertyChanged

时间:2013-08-12 11:44:09

标签: wpf binding datagrid datatable

我有这个代码将前端的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;
}

修改:回答我的问题

  1. 我应该说onChange(“数据”)

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

  3. <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目前面临的主要问题是绑定错误。

1 个答案:

答案 0 :(得分:1)

我认为你应该写: -

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