C# 从带有复选框的列表框中获取所选项目
A有一个带有复选框的列表框(我删除了与案例无关的关于对齐、宽度、边距的部分): A有一个站点集合(SItemCollection),它用项目填充我的列表框,其中一些项目被勾选。此集合位于SItem类之外,位于我的视图模型内。我还有一组应该在列表框中可用的所有项目(AvailableItems),以及一组应该在开始时选中的项目(ItemsToBetick)。这两个集合包含CachedStr类型的对象。通过使用这些集合,我可以获得我的SiteMcCollection:C# 从带有复选框的列表框中获取所选项目,c#,wpf,checkbox,data-binding,listbox,C#,Wpf,Checkbox,Data Binding,Listbox,A有一个带有复选框的列表框(我删除了与案例无关的关于对齐、宽度、边距的部分): A有一个站点集合(SItemCollection),它用项目填充我的列表框,其中一些项目被勾选。此集合位于SItem类之外,位于我的视图模型内。我还有一组应该在列表框中可用的所有项目(AvailableItems),以及一组应该在开始时选中的项目(ItemsToBetick)。这两个集合包含CachedStr类型的对象。通过使用这些集合,我可以获得我的SiteMcCollection: public Observab
public ObservableCollectionEx<SItem> SItemCollection
{
get
{
ObservableCollectionEx<SItem> strItems = new ObservableCollectionEx<SItem>();
this.AvailableSItems.ForEach(p =>
{
SItem item = new SItem();
item.Item = p;
item.IsChecked = false;
strItems.Add(item);
});
strItems.ForEach(p =>
{
if (this.ItemsToBeTicked.Contains(p.Item))
{
p.IsChecked = true;
}
else p.IsChecked = false;
}
);
return strItems;
}
}
public observeCollectionEx SItemCollection
{
得到
{
ObservableCollectionEx strItems=新的ObservableCollectionEx();
this.availableItems.ForEach(p=>
{
SItem item=newsitem();
项目。项目=p;
item.IsChecked=false;
增加(项目);
});
弗雷奇的strItems.ForEach(p=>
{
如果(此.ItemsToBeTicked.Contains(p.Item))
{
p、 IsChecked=true;
}
else p.IsChecked=false;
}
);
回程跨步;
}
}
上述代码有效。但我还需要一个方法,它将获得所有勾选项目的最终集(例如,按下按钮之后),这就是我被卡住的地方。当我勾选或取消勾选某个内容时,确实会收到通知。代码当前在get块中创建集合的新实例。必须对此进行更改,否则每次调用get块时都会还原在UI中所做的更改 获取当前在get块中的代码,将其提取到一个方法中,并使用该方法的返回值设置
SItemCollection
属性
例如,在构造函数中:
SItemCollection = CreateInitialCollection();
该物业将简化为:
public ObservableCollectionEx<SItem> SItemCollection
{
get
{
return _sitemCollection;
}
set
{
if (_sitemCollection!= value)
{
_sitemCollection= value;
RaisePropertyChanged("SItemCollection");
}
}
}
ObservableCollectionEx<SItem> _sitemCollection;
马丁,我试过了,没用。我出于某种原因所做的更改不会影响收藏。例如,我在开始时勾选了4项。再勾选一些。当我尝试从集合中获取选中的项目时,我得到了相同的4个项目。但我每次勾选或取消勾选某个内容时都会收到通知,但来自站点M。对不起,我是新来的,在我完成思考之前输入并发送了评论:)对其进行了一些编辑。哦,我只是看到每次在
SItemCollection
属性中调用getter时,您都会创建一个新的集合实例。这会使您每次都回到原始状态。你必须改变这一点。
SItemCollection = CreateInitialCollection();
public ObservableCollectionEx<SItem> SItemCollection
{
get
{
return _sitemCollection;
}
set
{
if (_sitemCollection!= value)
{
_sitemCollection= value;
RaisePropertyChanged("SItemCollection");
}
}
}
ObservableCollectionEx<SItem> _sitemCollection;
var checkedItems = SItemCollection.Where(item => item.IsChecked == true)