Resharper对XAML不满意

时间:2013-12-16 21:29:33

标签: c# wpf xaml binding resharper

这段XAML(在ListView的定义中)

    <ListView 
        x:Name="ListViewEpisodes" 
        Grid.Row="1" 
        Grid.Column="2" 
        ItemsSource="{Binding Episodes}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Episode Name" Width="Auto" DisplayMemberBinding="{Binding FileName}"  />
            </GridView>
        </ListView.View>
        <ListView.ContextMenu>
            <ContextMenu DataContext="{Binding RelativeSource={RelativeSource Self}}">
                <MenuItem 
                    Header="Delete episode" 
                    Command="w:MainWindow.DeleteEpisode"

                    <!--  PlacementTarget.SelectedItem not OK according to Resharper -->

                    CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}"/>
            </ContextMenu>
        </ListView.ContextMenu>
    </ListView>

Resharper警告:

Can not resolve property 'SelectedItem' in data context of type 'System.Windows.UIElement'        

现在,XAML确实有效,当我右键单击某个项目并执行ContextMenuItem时,它会使用Episode的内容填充参数。

为什么Resharper对此并不满意?

1 个答案:

答案 0 :(得分:3)

这很容易解释。 PlacementTarget类型为UIElement,但没有Tag成员。 ReSharper尝试查找具有标记名称的成员,但它失败了。

在编译时,ReSharper是对的。 ReSharper不知道运行时的确切类型。

也许您需要将绑定表达式重写为:

<ContextMenu DataContext="{Binding Tag, RelativeSource={RelativeSource Self}}" />

很难准确地说,因为你试图通过这种结合表达来实现目标并不明显。