这个二传手最终如何运作? (ListView MultiSelect)

时间:2013-09-30 18:07:45

标签: c# wpf xaml resharper

我有一个ViewModel,它用作ItemsSource的{​​{1}},它实现了一个名为ListView的接口:

ISelectable

/// <summary> /// An interface that should be implemented by a ViewModel that can be /// marked as selected, when multiple selections are allowed. /// </summary> public interface ISelectable { /// <summary> /// Gets or sets a value indicating whether this instance is selected. /// </summary> /// <value> /// <c>true</c> if this instance is selected; otherwise, <c>false</c>. /// </value> bool IsSelected { get; set; } } 显示“搜索客户”功能的搜索结果,因此所有项目都是ListView个实例 - ClientViewModel实现ClientViewModel所以{{1} property:

ISelectable

这完美无缺;在窗口的ViewModel中,我可以定义如下属性:

IsSelected

我得到了我所期待的。

我的问题是关于XAML的下面部分 - 设计师在<ListView x:Name="SearchResultsList" ItemsSource="{Binding SearchResults}"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="IsSelected" Value="{Binding IsSelected}" /> </Style> </ListView.ItemContainerStyle> <ListView.ItemTemplate> <DataTemplate DataType="{x:Type viewModels:ClientViewModel}"> <Label Content="{Binding Name}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> 部分强调public IEnumerable<ClientViewModel> SelectedClients { get { return _searchResults == null ? null : _searchResults.Where(e => e.IsSelected); } } 并在类型[类型的数据]的数据上下文中说“无法解析属性'IsSelected' window的ViewModel]“:

IsSelected
  • 如何告诉设计人员Value="{Binding}"的数据上下文应该与数据模板的数据上下文相同?
  • 如果XAML设计师说它无法解决,它最终如何在运行时工作?

更新

这是ReSharper警告。我可以将其关闭,但我想知道的是 setter最终如何工作,因为我得到了正确的自动完成:

    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
        </Style>
    </ListView.ItemContainerStyle>

但不是那样:

ListView.ItemContainerStyle

1 个答案:

答案 0 :(得分:1)

应该是Resharper正在做的伎俩,因为我从来没有看到默认设计师intellisense在Binding experssion中指出这种类型的错误。你可以完全切换Resharper来完全证明它。

因为你在ListViewItem样式中设置属性而你正在使用{Binding IsSelected},它将在每个listviewitem的DataContext中搜索IsSelected,它是你的ClientViewModel并且具有IsSelected属性...因此绑定是完美的..设计师不够聪明,不能探究这个深层次的