我正在开发一个应用程序,我需要从服务中提供一些选项,并从用户中捕获一些这些项目的选择。为了实现这一点,我尝试使用ListView和SelectionMode =" Multiple"但我发现这种方法存在一些麻烦。
在上图中,当用户从左侧面板中选择一个项目(从这里我将称之为"插槽")时,右侧面板中将显示所选插槽的详细信息。我的问题是处理"处理类型"领域。如您所见,插槽可能有许多处理类型。我需要双向将ListView的SelectedItems属性绑定到我的ViewModel中的某个属性,但这是不可能的(顺便说一下,我遵循MVVM模式)。有一种方法可以从ViewModel设置所选项目,然后捕获用户可以返回到我的ViewModel的任何其他选择(或取消选择)。当然我更喜欢干净简单的解决方案,但此时任何建议都会受到赞赏
答案 0 :(得分:0)
我们无法将Binding
分配到UWP中的只读属性SelectedItems
。
作为一个wrokaround,我们可以在Class中定义IsSelected
属性,Class应该继承INotifyPropertyChanged。
班级代码:
public class Bundle : INotifyPropertyChanged
{
private string _name;
private bool _isSelected;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
RaisePropertyChanged("IsSelected");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
我们可以将IsMultiSelectCheckBoxEnabled
设为false,表示CheckBox
不会显示。然后我们可以在CheckBox
中添加DataTemplate
控件,然后我们可以将IsChecked
属性绑定到IsSelected
。
例如:
<ListView Name="MyListView" SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="False">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}"></CheckBox>
<TextBlock Text="{Binding Name}" ></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>