Leagă comanda la MenuItem

Am ListView și încerc să leg comanda la ContextMenu din ListView.

<ListView x:Name="listView1" ItemsSource="{Binding Path=Persons}">
            <ListView.Resources>
                <ContextMenu x:Key="ItemContextMenu">
                    <MenuItem Header="Add" />
                    <MenuItem Header="Edit"/>
                    <Separator/>
                    <MenuItem Header="Delete" Command="{Binding Msg}" /> 
                </ContextMenu>
            </ListView.Resources>
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <!--<EventSetter Event="PreviewMouseLeftButtonDown" />--><!--Handler="OnListViewItem_PreviewMouseLeftButtonDown" />-->
                    <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}" />
                    <GridViewColumn Header="Sur Name" DisplayMemberBinding="{Binding Path=SurName}" />
                    <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Path=Age}" />
                </GridView>
            </ListView.View>


        </ListView>
        <Button Content="Message" Command="{Binding Msg}" />

Legarea la Button funcționează bine, dar când fac clic pentru a șterge elementul din ContextMenu, comanda nu funcționează! De ce?


person Neir0    schedule 24.04.2010    source sursă
comment
Întrebare posibilă similară: stackoverflow.com/questions/911904/. Acest răspuns îți rezolvă problema?   -  person Andy    schedule 25.04.2010


Răspunsuri (1)


Problema dvs. este legată de utilizarea legăturilor în resurse. În mod normal, ele nu funcționează decât dacă utilizați ceva de genul {Binding Path=Value,Source={x:Static Some.StaticProperty}}. Pentru ca legăturile ElementName sau DataContext să funcționeze, trebuie să apelați la ajutorul ElementSpy și DataContextSpy. În cazul dvs. particular, dacă vă bazați pe legarea DataContext, XAML ar trebui să arate astfel:

        <ListView.Resources>
            <DataContextSpy x:Name="spy" />
            <ContextMenu x:Key="ItemContextMenu">
                <MenuItem Header="Add" />
                <MenuItem Header="Edit"/>
                <Separator/>
                <MenuItem Header="Delete" Command="{Binding DataContext.Msg,Source={StaticResource spy}}" /> 
            </ContextMenu>
        </ListView.Resources>
person wpfwannabe    schedule 25.04.2010