【问题标题】:Does caliburn micro support IsEnabledChanged?caliburn micro 是否支持 IsEnabledChanged?
【发布时间】:2014-03-06 11:39:36
【问题描述】:

我想在按钮的启用状态更改时触发一个方法,但它不起作用。视图模型中的方法 void EnableStartScan(bool isEnabled) 永远不会被调用。

<telerik:RadRibbonGroup Header="{x:Static res:StringTable.MachineCtrl}">
    <telerik:RadRibbonButton x:Name="btnStart" 
                             Text="{x:Static res:StringTable.Start}" 
                             Size="Large"
                             LargeImage="/MCSP;component/Resources/Images/Button-Start.png">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="IsEnabledChanged">
                <cal:ActionMessage MethodName="EnableStartScan">
                    <cal:Parameter Value="{Binding ElementName=btnStart, Path=IsEnabled}"/>
                </cal:ActionMessage>
            </i:EventTrigger>
         </i:Interaction.Triggers>
     </telerik:RadRibbonButton>
</<telerik:RadRibbonGroup>

【问题讨论】:

    标签: wpf action caliburn.micro


    【解决方案1】:

    为什么不首先在 ViewModel 中控制按钮的状态?只需在您的 viewModel 中添加一个 gate 方法并在您的 viewModel 中添加触发您的其他操作

    public bool CanSayHello(string name)
    {
        if(EvalIfEnable())
        {
            YourOtherMethod();
            return true;
        }
    
        return false;
    }
    
    public void SayHello(string name)
    {
        ExecuteYourAction();
    }
    

    【讨论】:

    • 这就是我所做的。我只是想让门方法只返回真/假而不调用 YourOtherMethod()。我在这里看到一个条目:stackoverflow.com/questions/8937185/…,其中指出 EventTrigger 仅处理路由事件,不识别依赖属性更改事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2012-10-24
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多