C# Datatrigger在某些调用后未触发

C# Datatrigger在某些调用后未触发,c#,wpf,viewmodel,dependency-properties,datatrigger,C#,Wpf,Viewmodel,Dependency Properties,Datatrigger,似乎这个不开火的DataTrigger是反复出现的,不幸的是,我没有找到任何解决问题的答案。 我使用依赖属性来处理我的窗口 关闭它 隐藏它 表现出来 可以直接从窗口本身调用操作,也可以通过发布者模式从NotifyIcon调用操作 问题是:动作调用在一段时间后不会触发任何动作(取决于我之前所做的动作) 例如,如果我首先关闭窗口->确定 如果我隐藏窗口,然后显示它(这两个都可以),然后关闭它->不确定,什么都不会发生 窗口中的代码: <Window.Resources> &l

似乎这个不开火的DataTrigger是反复出现的,不幸的是,我没有找到任何解决问题的答案。 我使用依赖属性来处理我的窗口

  • 关闭它

  • 隐藏它

  • 表现出来

可以直接从窗口本身调用操作,也可以通过发布者模式从NotifyIcon调用操作 问题是:动作调用在一段时间后不会触发任何动作(取决于我之前所做的动作)

例如,如果我首先关闭窗口->确定

如果我隐藏窗口,然后显示它(这两个都可以),然后关闭它->不确定,什么都不会发生

窗口中的代码:

<Window.Resources>
    <Style x:Key="WindowBehaviourStyle">
        <Style.Triggers>
            <DataTrigger Binding="{Binding CloseSignal}" Value="true">
                <Setter Property="Behaviours:WindowBehaviour.Action" Value="Close"/>
            </DataTrigger>            
            <DataTrigger Binding="{Binding HideSignal}" Value="true">
                <Setter Property="Behaviours:WindowBehaviour.Action" Value="Hide"/>
            </DataTrigger>       
            <DataTrigger Binding="{Binding ShowSignal}" Value="true">
                <Setter Property="Behaviours:WindowBehaviour.Action" Value="Show"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
我可以说,当问题发生时,根本不调用方法“OnAction”

但是我不知道(我也不知道如何测试),问题是来自对视图的调用,还是来自对ActionProperty的调用。
考虑到我的研究,似乎每次我都应该重新调用Dependency属性,但我不知道怎么做,如果这是个问题,为什么我仍然可以调用两次Dependency属性,那么它就不起作用了?

我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。嗨,约翰,好的,很抱歉!
public static readonly DependencyProperty ActionProperty =
                    DependencyProperty.RegisterAttached(
                    "Action",
                    typeof(BehaviourType),
                    typeof(WindowBehaviour),
                    new UIPropertyMetadata(BehaviourType.None,OnAction));

    private static void OnAction(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue is BehaviourType)
        {
            Window window = GetWindow(sender);
            BehaviourType behaviourType=((BehaviourType)e.NewValue);
            if (window != null)
            {
                if (behaviourType == BehaviourType.Close)
                    window.Close();
                else if (behaviourType == BehaviourType.Hide)
                    window.Hide();
                else if (behaviourType == BehaviourType.Show)
                    window.Show();
            }
        }
    }