我正在使用第三方.dll,其中包含一种名为org.springframework.batch.item.data.MongoItemWriter
的对象。我在viewmodel中有这些图层的集合。在我看来,我有Layer
TreeView
绑定到图层集合。我还有一个每个项目的复选框。
我想以某种方式获取所有已检查的ItemsSource
项。
通常我会在对象的类中创建一个名为IsChecked的公共布尔属性,但Layer
没有该属性。
这是xaml:
Layer
以下是视图模型:
<TreeView Grid.Row="1" Grid.Column="0">
<TreeViewItem Header="Shape Files" ItemsSource="{Binding Layers}" >
<TreeViewItem.ItemTemplate>
<DataTemplate>
<StackPanel>
<CheckBox Content="{Binding Name}" />
</StackPanel>
</DataTemplate>
</TreeViewItem.ItemTemplate>
</TreeViewItem>
</TreeView>
以下是一个示例:
我知道一种方法是让复选框的public ObservableCollection<Layer> Layers
{
get { return mapModel.Layers; }
set { mapModel.Layers = value; OnPropertyChanged("Layers"); }
}
函数绑定到命令,项目本身作为命令参数发送。这真的是最好的方法吗?
答案 0 :(得分:1)
将另一个ObservableCollection<Layer>
对象绑定到TreeView.Tag
。注册CheckBox
&#39; Checked
和Unchecked
事件。在后面的代码中,sender
的{{1}}属性应包含DataContext
对象。根据您正在处理的事件,在绑定到Layer
的{{1}}对象中添加或删除它。您可以随时从视图模型访问ObservableCollection<Layer>
对象,您将始终获取所有已选中的TreeView.Tag
个对象。
在我看来,这个解决方案是最有效的解决方案,并且没有任何MVVM原则。如果您认为使用在视图中较低层中定义的类型是不可接受的,则将ObservableCollection<Layer>
强制转换为Layer
接口可以避免这种情况。