1

我有一个 DataGrid 的 ContextMenu ,它显示具有属性的项目Deleted。ContextMenu 中的项目之一需要删除,但您也可以取消删除项目(项目保留在列表中,但如果要被删除,则具有红色背景)。

目前我有这个:

    <Style x:Key="DeleteMenuItemStyle" TargetType="{x:Type MenuItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Deleted}" Value="true">
                <Setter Property="Header" Value="Undelete"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Deleted}" Value="false">
                <Setter Property="Header" Value="Delete"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

但是我不确定如何切换项目上的 Deleted 属性,目前我只能删除项目,并且该项目的 Click 事件处理程序是:

    private void mnuDelete_Click(object sender, RoutedEventArgs e)
    {
        DatabaseIndex index = (DatabaseIndex)((MenuItem)sender).DataContext;
        index.Deleted = true;
    }

因此,无论菜单项是删除还是取消删除,已删除属性都设置为 true atm。我可以检查发件人的文本是什么,然后根据它设置真或假,但这对我来说似乎完全错误,好像我更改文本“删除”和“取消删除”我必须更改代码。

我可以在样式中使用 EventSetter 并具有两个不同的事件处理程序,但它们彼此相同,除了 true 和 false。

这样做的最佳方法是什么?有没有办法喜欢“将 Click 事件绑定到 Deleted 属性”?

4

1 回答 1

1

为什么不检查Deleted房产本身?

private void mnuDelete_Click(object sender, RoutedEventArgs e)
{
    DatabaseIndex index = (DatabaseIndex)((MenuItem)sender).DataContext;
    if (index.Deleted)
    {
        index.Deleted = false;
        // code to undelete
    }
    else
    {
        index.Deleted = true;
        // code to delete
    }
}

或者,如果您只想切换Deleted属性:

index.Deleted = !index.Deleted;
于 2013-04-11T22:34:45.190 回答