ListView与DataTable绑定,删除行后不更新

本文关键字:更新 删除行 DataTable 绑定 ListView | 更新日期: 2023-09-27 17:49:30

所以基础:我有一个窗口与ListView上,它是由我的网格的数据上下文填充:

mainGrid.SetBinding(Grid.DataContextProperty, 
    new Binding() { 
        Source = new DataView() 
            { Table = SQLHandler.GetHandler[classType.ToString()] } 
    }
);
在xaml:

<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}">

一切正常,它被填充。正如你在上面看到的,我有一个可以被Singleton访问的SQLHandler类,我可以用索引器访问我的表。

问题:窗口加载,我选择一行,单击编辑按钮,新窗口加载,在那里我得到所选行的详细信息。当我通过这个新窗口删除这一行并关闭它时,主窗口(显示完整数据表的地方)没有相应地更新。我知道解决办法是什么,但我就是做不到。inotifyproperty更改了SqlHandler类绑定的接口。IndexerName等)

这里是主要的事情:数据集不是在我的SqlHandler类,它在SqlExecuter,我所有的sql命令正在执行。

public override DataTable this[string key]
{
    get
    {
        if (sqlExecuter.GetDataSet.Tables.Contains(key)) 
            return sqlExecuter.GetDataSet.Tables[key];
        throw new KeyNotFoundException("The specified key was not found");
    }
}

where GetDataSet is:

public DataSet GetDataSet
{
    get { return ds; }
}

我怎样才能使它工作?当我在不同的窗口中删除一行并关闭该窗口时,主窗口的listview不会更新自己。我唯一的选择是放一个刷新按钮,然后重新绑定datcontext属性,然后它当然可以工作,但我的目标是有一个"实时"更新系统,这就是绑定的作用。

我尝试过的:在SqlExecuter中的GetDataSet:实现了inotifypropertychanged接口,但没有任何改变。我不能在SqlHandler的索引器上实现inotifypropertychanged,因为它没有setter,我总是从代码后面访问表,我的sqldataadapter正在填充它们(Fill方法)

p。s:我真的不打算创建一个ObservableCollection,因为我的代码的90%应该重写,当我删除一行,我清除我的数据集,并再次填充它,所以我甚至不期望它注意到每一个变化,只是当我重新填写我的数据表,我的listview应该知道它…刷新自身

ListView与DataTable绑定,删除行后不更新

我认为使用第二个窗口作为弹出可能是这里的问题。如果你在同一页面上进行编辑,那么你可以使用一个简单的

ListView1.DataBind()

刷新delete命令末尾的列表内容。如果页面被重新绘制而不是重新加载,你也可以使用IsPostBack方法来更新列表。

您可以尝试调用页面名称,然后从其他窗口的列表视图,但我不确定您是否可以从另一个窗口执行那种命令。

或者你可以在不同的页面上进行编辑,而不是在单独的窗口中,这样当你返回到原始页面时,列表视图就会被重新绘制。

和你一样,我相信有一个更简单的方法来解决你的问题,但遗憾的是我不知道。

您可能需要将绑定模式设置为两种方式:

Mode = BindingMode.TwoWay

WPF由于一些不明显的原因,默认为单向绑定。希望这对你有所帮助。我不是特别了解情况,但我在简单的数据绑定到ObservableCollections中看到过这个问题,而双向绑定解决了这个问题。