重新绑定Observable集合wpf

时间:2017-03-03 18:04:19

标签: wpf datagrid

我创建了一个WPF窗口,根据用户对日期的选择来绑定Datagrid中的数据.BY默认加载特定日期的工作正常。但是当日期改变时,网格显示空行。但我使用的可观察集合有数据。可观察集合是DataTable类型。

注意:我没有记录时设置itemsource = null,因为我根据单选按钮检查为2个不同的表使用相同的网格。

我在XAML中将公共变量设置为Binding变量,使用了INOtifyChanged接口。

我的问题是,当同一个集合重新加载时,Datagrid无法绑定并显示空行但生成列。当前一次尝试将itemsource设置为null时,当前加载也无法加载列。

我面临的任何一般情况,?请帮忙

我的代码:

private ObservableCollection<DataTable> custInfoCol = new ObservableCollection<DataTable>();

public event PropertyChangedEventHandler PropertyChanged = delegate { };

private DataTable _CustInfo;

public DataTable CustInfo
{
    get { return _CustInfo; }
    set
    {
        _CustInfo = value;
        PropertyChanged(this, new PropertyChangedEventArgs("CustInfo"));

    }
}

private void rbPrev_Checked(object sender, RoutedEventArgs e)
{
    custInfoCol.Clear();
    custInfoCol.Add(CustInfo = showcustomer(cid));
}

3 个答案:

答案 0 :(得分:0)

听起来您可能需要更改绑定中的UpdateSourceTrigger:

Height="{Binding Height, ElementName=Day, UpdateSourceTrigger=PropertyChanged}"

之前我的默认行为有问题,所以现在我只是每次都输入它。

https://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

答案 1 :(得分:0)

根据您在评论中提供的这段代码:

<DataGrid ItemsSource="{Binding custInfo,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
          DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"

我认为Xaml中存在拼写错误。您应该将... Binding CustInfo...与资本 C 一起使用。

当然,如果AutoGenerateColumns为真,那我猜这不是问题,因为你写了

  

Datagrid无法绑定并显示空行但生成列

Binding的工作原理。因此,您需要检查showcustomer(cid)并确保其中包含所需的DataRow

答案 2 :(得分:0)

我解决了这个非常简单的问题。我已经将datatable实例创建为全局,并在加载executereader()方法之前将其更改为local。它解决了问题。