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

我现在需要获取到我选中的那一行的内容该怎么去做... 我现在需要获取到我选中的那一行的内容该怎么去做 展开
 我来答
376710727
2016-10-18 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1229万
展开全部
这个取决于你的“更新”,是什么概念了。
WPF不同于WINFORM,前端的datagrid中的item其实就是ViewModel层的一个个数据,
因为你是在“更新”中,所以如果你选中的这个item在下次更新的时候没有了,(比如不存在了),那么你选中的行肯定是会被消掉的。这个也没有任何获取的意义, 硬要获取的话,建议你添加一个事件,SeletionChanged,即当你选择一行的时候,直接拿到这个item,然后处理去,就不再关注前端UI了。

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

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

private ObservableCollection<KeyValuePair<string, string>> _item = null;
//声明了一个集合,集合就是最简单的键值对
public IList<KeyValuePair<string, string>> Items
{
get { return _item ?? (_item = new ObservableCollection<KeyValuePair<string, string>>()); }
}
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<string, string>(gid, gid));
}
}));
};
}

//我通过后台线程 循环100次,每秒加一个新的项进入DATAGRID. 运行后的效果就是DataGrid一直在累加, 但是我选中的项一直都在, 不会消失或者失去焦点。
追问
你的一百次用的是add每次添加一行数据,和我的情况不同,我的是现在已经有了100条数据了,知识这100 条数据的内容实时的在发生变化,就会出现选中被取消,我如果把实时变化关掉选中时没问题的,还有就是你说的selectionchanged的触发事件是什么?
追答
就是第一种情况了,数据源一直在改变。
DataGrid有一个事件,叫选项变更

后台会有一个SelectedSomeRow方法,就是当你选中某一行的时候就会触发。
private void SelectedSomeRow(Sender sender,EventArg e)
{
//在这里面处理你的选中项
var item = Dg.SelectedItem as (你绑定的类型);
//对item 进行处理即可。
}
匿名用户
2016-10-23
展开全部
记下唯一标志,刷新后重新选中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式