【问题标题】:WPF DataGrid binding not responding to PropertyChangedWPF DataGrid 绑定不响应 PropertyChanged
【发布时间】:2013-08-13 17:06:19
【问题描述】:

我有这段代码可以将前端的数据网格绑定到我的视图模型中的 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;

在我的视图模型中

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("data")

  2. 我还应该在我的绑定中添加 .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 目前面临的主要问题是绑定错误。

【问题讨论】:

    标签: wpf binding datagrid datatable


    【解决方案1】:

    我认为你应该写:-

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

    【讨论】:

    • 是的,它部分正确,我还必须在 .xaml 文件中的绑定中添加 .data。
    • 你为什么不使用 Snoop(tool) 来调试你的 xaml 部分,它会告诉你所有关于你的控件绑定
    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2012-09-01
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多