C#的wpf工程中由于datagrid中的数据一直在更新所以每次选中某一行时,数据一更新选中就会被取消掉

我现在需要获取到我选中的那一行的内容该怎么去做
2025年03月20日 06:18
有2个网友回答
网友(1):

这个取决于你的“更新”,是什么概念了。
WPF不同于WINFORM,前端的datagrid中的item其实就是ViewModel层的一个个数据,
因为你是在“更新”中,所以如果你选中的这个item在下次更新的时候没有了,(比如不存在了),那么你选中的行肯定是会被消掉的。这个也没有任何获取的意义, 硬要获取的话,建议你添加一个事件,SeletionChanged,即当你选择一行的时候,直接拿到这个item,然后处理去,就不再关注前端UI了。

如果你的数据是累加的,即每次更新后,上次的数据还在, 那么是可以保留选中的啊,
我写的测试程序如下, 前端的DataGrid名字叫 DataDg:

public delegate void SysBusyDelegate(bool isbusyt);//声明一个委托
public event SysBusyDelegate sysbusyEvent = null;

private ObservableCollection> _item = null;
//声明了一个集合,集合就是最简单的键值对
public IList> Items
{
get { return _item ?? (_item = new ObservableCollection>()); }
}
public MainWindow()
{
InitializeComponent();
DataDg.ItemsSource = Items;
Binding();
}
void Binding()
{
var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
sysbusyEvent.Invoke(false);
}

})) { IsBackground = true };
thread.Start();

sysbusyEvent += (state) =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
if (state == false)
{

var gid = Guid.NewGuid().ToString();
Items.Add(new KeyValuePair(gid, gid));
}
}));
};
}

//我通过后台线程 循环100次,每秒加一个新的项进入DATAGRID. 运行后的效果就是DataGrid一直在累加, 但是我选中的项一直都在, 不会消失或者失去焦点。

网友(2):

记下唯一标志,刷新后重新选中