1 回答
TA贡献1805条经验 获得超10个赞
在 WPF 中,我们使用所谓的 MVVM。我们不会像在 winforms 中那样去查看 ListViewItem 控件,而是将所需信息的属性放在视图模型类上,并且使用绑定来告诉 UI 如何更新视图模型类,反之亦然。
因此,我们将向 Question 添加 IsSelected 属性。我们还将将该类从Questions重命名为Question,问题集合现在将命名Questions为Strings。
public class Question
{
public int ID { get; set; }
public string Text { get; set; }
public bool IsSelected { get; set; }
}
这是您的列表视图。我们将 CheckBox.IsSelected 绑定到 ListViewItem.IsSelected,因此用户只需单击项目上的任意位置即可检查它们。然后我们将 Question.IsSelected 绑定到 ItemContainerStyle 中的 ListViewItem.IsSelected。
<ListView
x:Name="listview"
Background="Azure"
SelectionMode="Multiple"
ItemsSource="{Binding Questions}"
>
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"
Content="{Binding Text}" Margin="0,5,0,0"
/>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
以下是我们如何处理该事件处理程序中选定的问题。我猜测您的Strings收藏是 Window 或您拥有的任何视图的成员;如果情况并非如此,请告诉我,我们将找出解决办法。请记住,我们Questions现在调用该集合。
private void AddToSurvey_Click(object sender, RoutedEventArgs e)
{
string allQuestionsText = "";
foreach (var question in Questions.Where(q => q.IsSelected))
{
// I don't know what you really want to do in here, but it sounds like you do.
allQuestionsText += question.Text + "\n";
}
}
- 1 回答
- 0 关注
- 79 浏览
添加回答
举报