C#的wpf工程中由于datagrid中的数据一直在更新所以每次选中某一行时,数据一更新选中就会被取消掉
2个回答
展开全部
这个取决于你的“更新”,是什么概念了。
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一直在累加, 但是我选中的项一直都在, 不会消失或者失去焦点。
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
展开全部
记下唯一标志,刷新后重新选中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询