我在WPF MVVM中工作。
我需要创建一个复选框数组(显示给用户) - 每个复选框都存储有关是否将文件上传到服务器的信息。
例如 - 如果选中复选框1,则上传file1。 如果选中checkbox2,则还会上传file2。
最好的方法是什么?我可以创建自己的属性来存储文件名吗?
我想通过使用复选框上的文本并将其作为参数传递给命令来实现它,但是定义自己的属性并使用它应该会好得多。
(如果我不想向用户显示确切的文件名怎么办?)
这是我写的:
<CheckBox Name="File1" Content="File1" Command="{Binding AddFileToUpload}" CommandParameter="{Binding ElementName=File1, Path=Content}"/>
<CheckBox Name="File2" Content="File1" Command="{Binding AddFileToUpload}" CommandParameter="{Binding ElementName=File2, Path=Content}"/>
最诚挚的问候, 埃里克
答案 0 :(得分:1)
我不确定您的ViewModel是如何设置的,但这就是我接近它的方式:
在ViewModel中创建ObservableCollection
个对象,这些对象代表您的文件,每个文件都有自己的IsSelected
属性。
创建ItemsControl
并将ObservableCollection
绑定到ItemsControl.ItemsSource
属性。
将ItemsControl.ItemsPanel
设置为包含ItemsPanelTemplate
或其他可扩展容器的StackPanel
。
将ItemsSource.ItemTemplate
属性设置为包含复选框的DataTemplate
,将IsChecked
属性绑定到对象的IsSelected
属性。
然后,创建一个Button
并使用一个迭代ObservableCollection
的命令,收集包含IsSelected = true
的文件,然后继续您的流程。
这样您就不会直接在View中存储任何内容。复选框的生成和内部显示的数据仅依赖于您存储在对象中的数据,并通过绑定提供。
修改强>