- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ListBox
它的 ItemsSource 绑定(bind)到 CollectionViewSource,而 CollectionViewSource 又绑定(bind)到 ObservableCollection。
ListBoxItem 的模板包括 复选框 选中时,表示该项目已被选中。
我的问题是,我不知道如何找出哪些项目的复选框被点击了。
最佳答案
复选框绑定(bind)到什么?如果它绑定(bind)到集合中对象的属性,那么您不需要确定单击了哪个复选框。如果它没有绑定(bind)到对象或 ViewModel 上的某些东西,您可能能够从列表框中获取 SelectedItem。
以前我已经将 listBox 的 SelectedItem 属性绑定(bind)到我的 ViewModel 上的一个属性,这样我就可以在它发生变化时运行它。
至于获取索引,您应该能够将从列表框返回的 idex 与 CollectionViewSource.View 中的项目索引匹配,该项目包含按显示顺序显示的集合的当前 View 。
如果您不使用 MVVM,我建议您这样做。我一开始不使用它,很快就陷入了代码隐藏的泥潭。
MVVM 中的示例
假设我们有具有三个字符串属性和一个 bool 值的 MyClass。在 MVVM 中,我们有一个 MyClassViewModel,它有一个属性来包含一个 MyClass 的实例以及 View 所需的任何功能(在这种情况下是一个列表框项)。我们还有一个 MyWindowViewModel,它将保存数据的集合以及我们主视图的其他内容。
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
Public Class MainViewModel
Inherits ViewModelBase
Public Property MyClassCollection as New ObservableCollection(Of MyClassViewModel)
End Class
Public Class MyClassViewModel
Inherits ViewModelBase
Public Property ModelClass as MyClass
Public Sub New()
End Sub
Public Sub New(ByRef CustClass as MyClass)
ModelClass = CustClass
End Sub
End Class
For Each mc as MyClass in e.Results
MyClassCollection.Add(New MyClassViewModel(mc)
Next
<DataTemplate DataType="{x:Type local:MyClassViewModel}">
<Border BorderBrush="#FF036200" BorderThickness="1" Background="#FF3CC600" CornerRadius="10">
<Grid Height="Auto" Margin="4" DataContext={Binding ModelClass}>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"/>
<ColumnDefinition Width="0.5*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding StringProp1}" VerticalAlignment="Top" Margin="0" FontSize="16"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding StringProp2}" VerticalAlignment="Top" Margin="0" Grid.Row="1" FontSize="16"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding StringProp3}" VerticalAlignment="Top" Grid.Column="1" Margin="0" FontSize="16"/>
<CheckBox Content="Is Bool True?" HorizontalAlignment="Left" IsChecked="{Binding BoolProp}" VerticalAlignment="Top" Grid.Column="1" Margin="0" Grid.Row="1" FontSize="16"/>
</Grid>
</Border>
</DataTemplate>
<DataTemplate DataType="{x:Type local:MyClassViewModel}">
<Border BorderBrush="#FF036200" BorderThickness="1" Background="{Binding BorderBackground}" CornerRadius="10">
Imports System.ComponentModel
Public MustInherit Class ViewModelBase
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
Protected Sub OnPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
End Class
Public Property IsSelected() As Boolean
Get
Return m_IsSelected
End Get
Set(ByVal value As Boolean)
m_IsSelected = value
OnPropertyChanged("IsSelected")
End Set
End Property
关于c# - 如何从绑定(bind)到 CollectionViewSource 的列表框中找到正确的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349235/
我是 WPF 新手,尝试使用自定义排序对 CollectionViewSource 进行排序时遇到了困难。情况如下: 我有一个使用参数调用的 SearchView,它变成了它的 datacontext
tldr:CollectionViewSource.Filter 被另一个控件覆盖。我怎样才能有两层过滤,以便控件只能看到预过滤的集合? 我有一个第三方网格控件,我通过 ICollectionView
谁能告诉我如何在 Windows 8 上的 XAML 中设置 CollectionViewSource 的正确属性? x:name 是对象的名称。来源是什么? d:Source 和 Source 有
我正在使用 CollectionViewSource 对我的数据进行分组。在我的数据中,我需要对 Property1 和 Property2 进行分组。 唯一的规定是我不想要另一个组的子组。因此,当我
我正在尝试设置一个从 CollectionViewSource 获取数据的 ListBox。我想要发生的是,当我更新基础数据源时,列表框也会更新。我的 Xaml 看起来像这样......
我有一个 collectionviewsource 项目。每个项目都是一个对象,它有一个属性 SentTime 和另一个属性 ParentId。我想按 ParentId 对项目进行分组,并按以下方式对
我正在尝试向 CollectionViewSource 添加附加行为,以便我可以在 XAML 中的 View 模型上提供过滤器 Predicate 属性。 XAML 如下所示:
我想使用过滤器 将ComboBox 绑定(bind)到我的数据。为此,我创建了一个 TextBox 和一个 ComboBox。在后面的代码中,我读取了一个文件并生成了类 Channel 的对象,这些对
我正在将 ItemsControl 绑定(bind)到 CollectionViewSource。这是代码: this.Trucks = new ObservableCollection();
我正在将 ComboBox 绑定(bind)到实体,但我想过滤数据。 到目前为止我尝试了两种方式: “简单”一:直接将过滤器应用到 ObjectSet throughtLINQ 到实体 按照上文所述设
我正在尝试对 CollectionViewSource 进行基本使用,但我肯定遗漏了一些东西,因为它无法正常工作。这是我的 XAML:
我有一个需要过滤的“东西”列表,然后以分组和排序的方式显示。计算分组和排序顺序所需的数据不能作为简单的属性提供 - 需要在代码中完成一些工作来计算顺序和组。 CollectionViewSource
我有一个绑定(bind)到 CollectionViewSource 的 WPF ListView。它的来源绑定(bind)到一个属性,如果用户选择一个选项,它可以改变。 当 ListView 源由于
我真的很大ObservableCollection我需要对其提供用户友好的过滤。 public static async Task RefilterViewAsync(this ItemsContro
我编写了一个带有搜索扩展名的自定义 WPF 控件,我们将其命名为 MyControl . 控件是 ItemsControl 的后代类(class)。 所以我像这样将数据源提供给它: 控件本身使用 pr
我处于这种困境中,希望有人能帮助我 抱歉,我无法在此处粘贴代码作为在此处发布公司栏。 我试图在xaml中使用collectionviewsource。我尝试了两种方法,静态资源和cvs.source。
我在 DataGrid 中使用 CollectionViewSource 作为 ItemSource mLevelSource; public ObservableCollection LevelS
一段时间以来,我一直试图在我的数据网格中对数据进行分组,但没有成功。在我的 ViewModel 中,属性: public ObservableCollection Competitors { get;
我正在使用 MVVM 模式开发 WPF 桌面应用程序。 我试图根据 TextBox 中输入的文本从 ListView 中过滤出一些项目。我希望在更改文本时过滤 ListView 项目。 我想知道当过滤
我想将一个datagrid.itemssource绑定(bind)到一个匿名类型的列表,所以我将它绑定(bind)到一个collectionViewSource,但我需要在列表中添加或删除一个项目,但
我是一名优秀的程序员,十分优秀!