这是我的问题:
我想访问另一个类的方法中通过可绑定集合绑定到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>
答案 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);
}
示例屏幕截图