繁体   English   中英

在C#中切换MenuItem

[英]Toggle MenuItem in c#

我有一个用于显示显示属性为Deleted项目的DataGrid ContextMenu。 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。 我可以检查发件人的文本是什么,然后根据此设置为true或false,但这对我来说似乎是完全错误的,好像我更改了文本“ Delete”和“ Undelete”一样,我必须更改代码。

我可以使用这种风格的EventSetter并具有两个不同的事件处理程序,但是除了true和false之外,它们彼此相同。

最好的方法是什么? 有什么办法喜欢“将Click事件绑定到Deleted属性”吗?

为什么不检查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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM