如何从ShellViewModel.cs文件访问列表框的selectedItems?

时间:2019-05-29 11:36:00

标签: c# mvvm caliburn.micro

这是我的问题:

我想访问另一个类的方法中通过可绑定集合绑定到ListBox的项目(及其属性)。 (ShellViewModel) 更确切地说:我想知道当前在此列表中选择了哪些项目。

我正在使用 C#,Caliburn.Micro,设计模式应为MVVM

如果按下按钮“求值”,则根据所选的ListBoxItems,将调用不同的方法。

因此ShellView中的XAML代码可以正常工作,“功能”代码也可以“正常工作”,但是如果我直接在xaml.cs文件中进行编码,那么它就可以正常工作。 (大不,不)

因为我对本主题还不熟悉,所以我尝试创建用于访问的View的新实例,但这将使我能够控制ListBox,而无需“知道”原始项目中选择了哪些项目。实例。

这是常规的列表框

<ListBox x:Name="MainListBox" ItemsSource="{Binding SCollection}" 
           Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="6" Grid.RowSpan="1" 
           SelectionMode="Multiple" 
                  ScrollViewer.VerticalScrollBarVisibility="Visible" 
            ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 MaxHeight="300" MinHeight="200" MaxWidth="340" Margin="5">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Margin="0,5">
                        <StackPanel>
                            <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Padding="3,5,5,5" />
                            <TextBlock Text="{Binding Path=Info}" FontWeight="SemiBold" Padding="3,5,5,5" />
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>
<Button x:Name="Evaluate" Background="Blue" Grid.Column="1" Grid.Row="7" MinWidth="80" Margin="5" Content="Test" Grid.ColumnSpan="1" />

所以这是一些问题:

是否有类似的解决方案,例如通过xaml绑定了“ SelectedItem”(绑定到可访问变量),用于多个选定项?(也许我只是错过了一些东西?)

是否可以访问ListBox的“原始”实例(因此也可以访问“实时”选择的项目)?

要明确: 除了可能存在其他更好的解决方案之外,唯一的问题是,我希望绑定到按钮的被称为“评估”的方法能够很好地了解在列表框中选择了哪些项目。 < / p>

1 个答案:

答案 0 :(得分:0)

我相信我正确理解了您的担忧。为了使“评估”方法了解已选择了哪些项目,可以采用以下策略。

在您的集合类型中

添加一个布尔属性,称为 IsSelected ,这将有助于跟踪选定的项。例如,

public class Contact : PropertyChangedBase
{
    public string Name { get; set; }
    public string Info { get; set; }
    public bool IsSelected { get; set; }
}

现在假设您的收藏集定义如下。

公共ObservableCollection SCollection {get;组; } = new ObservableCollection();

您可以按以下方法过滤“评估方法”中的“选定项目”。

public void Evaluate()
{
    var selected = SCollection.Where(x => x.IsSelected);
}

示例屏幕截图

enter image description here