gpt4 book ai didi

c# - 获取 ListView 的选中项(MVVM、Caliburn.Micro)

转载 作者:行者123 更新时间:2023-11-30 21:48:46 31 4
gpt4 key购买 nike

什么情况:

我正在使用 Caliburn.Micro 开发 C# WPF 应用程序。我正在使用 MVVM 模式。

我有一个带有 ContentControl 作为 ItemTemplate 的 ListView。 ListView 的 ItemsSource 绑定(bind)到相应 ViewModel 中的 ViewModel 的列表(ObservableCollection)。

<ListView ItemsSource="{Binding ViewModelList}" SelectionMode="Extended">
<ListView.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>

我想要的:

我想获取 ListView 的选定项(所有项),但我不知道如何才能不违反 MVVM 模式。

在 ContentControl 呈现的 ViewModel 中有一个属性“IsSelected”并以某种方式将其绑定(bind)到我的 ListView 会很好。

是否可以这样做或者是否有其他/更好的方法?


更新:

这比预期的要容易。我添加了一个属性 public bool IsSelected { get;放; } 在我的 ViewModel 中并将其放入 ListView 控件中:

<UserControl.Resources>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</UserControl.Resources>

现在我可以通过以下方式获取选定的项目:

foreach (var item in ViewModelList)
{
if (item.IsSelected)
{
// Do stuff
}
}

最佳答案

<Grid>
<Grid.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=OneWayToSource}"/>
</Style>
</Grid.Resources>
<ListView ItemsSource="{Binding ViewModelList}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding IsSelected}"/>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal">
</StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>

关于c# - 获取 ListView 的选中项(MVVM、Caliburn.Micro),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447784/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com