WPF listbox 中的checkbox 如何获得是否选中项

SeeYou孙悟空 2015-01-05 05:19:01


如上图,已经得到listbox中的checkbox中的值,用Items 是没法获取到的,WPF 不是很熟,网上没找到答案,希望 大家帮帮忙,
就是我点击checkbox,然后我要获取到那一项被选中,然后我再做处理。
...全文
1045 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeeYou孙悟空 2015-01-06
  • 打赏
  • 举报
回复
过了一天,就一个人回复我,来点人帮帮忙啊。。。。。小弟初学WPF,是新手.......各种不解~~~
SeeYou孙悟空 2015-01-06
  • 打赏
  • 举报
回复
OK,我又来了.......上述说的如何获取到checkbox是否选中,这个已经安装1楼说的那样可以做到,的确感觉没有什么好的办法,只有这个绑定属性来实现。。。但是问题来,我点击 checkbox之后,将会修改属性的值,我试着用ObservableCollection change的事件来获取我改变,但是发现无法实现。 Listbox中的数据我都是存在ObservableCollection<T> 中。。。。。

尽管我现在通过别的方法实现了功能 如下图:


但是,我觉得我的方法似乎有点问题,尽管他是实现了。也不知道为什么ObservableCollection change事件为什么不触发...

我用的方法是在类中 这样写这个Ischeck

public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}

// Using a DependencyProperty as the backing store for IsChecked. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register("IsChecked", typeof(bool), typeof(L_GrainAttr), new PropertyMetadata(false, IsCheckedChangeEvent));

public static void IsCheckedChangeEvent(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
L_GrainAttr lg = d as L_GrainAttr;
if (lg == null || lg.IsCheckedChange == null)
{
return;
}
lg.IsCheckedChange(d);

}

public delegate void change(object sender);
public event change IsCheckedChange;


然后在后台中

var list = CreatForm.condlist as ObservableCollection<L_GrainAttr>;

foreach (L_GrainAttr lg in list)
{
lg.IsCheckedChange += lg_IsCheckedChange;
}
LbBox.ItemsSource = list;



尽管是实现了。。。。。但是我觉得 这样写似乎很不对的样子。。。。也不知道有没有更好的办法,希望大家参谋下
SeeYou孙悟空 2015-01-05
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
获取选定的项,你这个应该是绑定的数据?? 在绑定的数据类中加一个isChecked字段,绑定到CheckBox的Checked属性上,选中的话,遍历获取集合中IsChecked为true的对象就行了。
恩,当时我也这样想过,就是不知道有没有别的方法.....网上有种用chlidren.add添加进checkbox的,但是我是在后台动态添加的, 类似如此


    DataTemplate dt =new DataTemplate();
                FrameworkElementFactory fef  =new FrameworkElementFactory(typeof(CheckBox));

                bind.Path = new PropertyPath("GrainName");
                fef.SetBinding(CheckBox.ContentProperty,bind);
                dt.VisualTree = fef;
                LbBox.ItemTemplate = dt;
还有就是,我这个选中完了以后,切换另一个条件,再切回来,我还得是刚才选中的几个选项的,另外稍稍吐槽一句,我怎么感觉WPF写个很简单的东西,都会绕了好几道弯弯,感觉特别变流,感觉比winform 复杂似得,唉,也许是我才开始转向WPF,学的不精吧。。。。恩,你说的这个方法,我明天上班再试试....
  • 打赏
  • 举报
回复
获取选定的项,你这个应该是绑定的数据?? 在绑定的数据类中加一个isChecked字段,绑定到CheckBox的Checked属性上,选中的话,遍历获取集合中IsChecked为true的对象就行了。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧