一些电话后Datatrigger没有触发

时间:2015-03-27 16:21:36

标签: c# wpf viewmodel dependency-properties datatrigger

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

  • 关闭它

  • 隐藏它

  • 显示

可以直接从Window本身调用操作,也可以通过Publisher模式从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>

依赖项属性的代码:

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();
            }
        }
    }

我可以说方法&#34; OnAction&#34;当问题发生时,根本不会被调用。

但是我不知道(我不知道如何测试它),如果问题来自对视图的调用,或者来自ActionProperty的调用。 考虑到我的研究,我似乎应该每次重新启动依赖属性,但我不知道如何,如果这是问题,为什么我仍然可以调用两次依赖属性,那么它不会工作了吗?

0 个答案:

没有答案