8

ObservableCollection の単純なアイテムを含む ListView を持つユーザー コントロールがあります。ListView で選択されている内容に応じて、その ListView の ContextMenu に項目を含めたいと思います。項目が選択されていない場合、一部の MenuItems は表示されません。

ContextMenu を開いたときにコンバーターが呼び出されません。バインディングが間違っているようです。出力ウィンドウに次のように表示されます。

System.Windows.Data エラー: 4 : 参照 'ElementName=listView' でバインディングのソースが見つかりません。BindingExpression:Path=SelectedItem; DataItem=null; ターゲット要素は 'MenuItem' (Name='') です。ターゲット プロパティは「Visibility」(タイプ「Visibility」)

何が悪いのかわからず、ウェブを検索してもわかりませんでした。

単純化されたコードを次に示します。

<UserControl x:Class="MyApp.DatabaseControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MyApp"
Height="Auto" 
Width="Auto">

<UserControl.Resources>
    <l:ValueToVisibilityConverter x:Key="valueToVisibility" />
</UserControl.Resources>

<Grid>
    <ListView x:Name="listView" ItemsSource="{Binding Persons}">
        <ListView.View>
            <GridView>
                <GridViewColumn Width="140" Header="First Name" DisplayMemberBinding="{Binding FirstName}"/>
                <GridViewColumn Width="140" Header="Last Name" DisplayMemberBinding="{Binding LastName}" />
            </GridView>
        </ListView.View>

        <ListView.ContextMenu>
            <ContextMenu>
                <MenuItem 
                    Header="Open" 
                    Visibility="{Binding SelectedItem, ElementName=listView, Converter={StaticResource valueToVisibility}}"/>
                <Separator/>
                <MenuItem Header="Add..."/>
                <MenuItem Header="Remove"/>
            </ContextMenu>
        </ListView.ContextMenu>
    </ListView>
</Grid>

どうもありがとう!

4

1 に答える 1