综合应用WPF/WCF/WF/LINQ之四十:实现一个简单的DataGrid之CheckBox已勾选的项的保存...
本文共 1152 字,大约阅读时间需要 3 分钟。
为解决这个问题,我们可以定义一个私有变量用于保存已勾选的值。然后注册一个CheckBox.CheckedEvent事件,一个CheckBox.UncheckedEvent事件,并在相应的RoutedEventHandler指定的方法中添加或者移除当前勾选的值。 现在剩下的麻烦事情就是为各行中的CheckBox控件设置IsChecked属性了。我们在前面的文章中已经介绍过了如何找到一个控件,但在这里,我们却发现总是报错,提示this.ItemContainerGenerator.ContainerFromItem(item)为空。 这是因为在Binding方法执行完之前,该控件的VisualTree还没有来得及生成。为了等待VisualTree的生成,我们需要使用WPF中的线程技术。您可能在以前的代码中经常用到this.Invoke方法,但在WPF中,您却需要使用this.Dispatcher.Invoke方法。其代码如下: 1 this.Dispatcher.Invoke(
DispatcherPriority.ContextIdle, (
InvokeDelegate)
this.SetCheckBoxIsCheckeds);
这样一来,程序就会在比UI层的级别更高的任务完毕后,调用设置CheckBox的IsChecked属性的方法了。 具体的赋值方法就比较简单了: 1 foreach (
int key
in this._CheckBoxCheckedValues.Keys)
3 string name =
"CheckBox" + key.ToString();
5 foreach (
int value
in this._CheckBoxCheckedValues[key])
7 object item = (
this.ItemsSource
as IList)[value];
9 ContentPresenter presenter =
this.ItemContainerGenerator.ContainerFromItem(item).GetPresenter(name);
10 DataGridCheckBox checkbox = presenter.ContentTemplate.FindName(name, presenter)
as DataGridCheckBox;
12 checkbox.IsChecked =
true;
本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/78986,如需转载请自行联系原作者