【问题标题】:Caliburn Micro void function can't be triggered inside DialogHostDialogHost 内部无法触发 Caliburn Micro void 功能
【发布时间】:2019-10-15 17:45:08
【问题描述】:

通常您可以通过以下方式在 View 中调用 void 函数(来自 ViewModel):

按钮名称 = VoidFunctionInViewModel

按钮命令={绑定路径=VoidFunctionInViewModel}

但是在 DialogHost 中访问该函数时,不会触发 void 函数。

我尝试将字符串字段检索到 DialogHost,它工作正常,但是当涉及到按钮上的命令时,它就不起作用了。

MainViewModel.cs 命令:

public async void OpenDialog()
   {
       var confirm = new ConfirmationView{DataContext = this};
       await DialogHost.Show(confirm);
   }
   public void Accept()
   {
       Console.WriteLine("It Failed!");
   }
   public string Success {get; set;} = "Success"

ConfirmationView.xaml:

<Button Command="{Binding Path=Accept}" Content="Accept"/>
<Button Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" Content="Cancel"/>
<TextBlock Name="Success"/>

MainView.xaml:

<materialDesign:DialogHost DialogTheme="Inherit" CloseOnClickAway="True">
</materialDesign:DialogHost>

DialogHost 成功使用并显示了属性“Success”。 但是DialogHost不会触发带有Accept命令的按钮“Accept”。

“取消”按钮正在使用,来自 materialDesign 的命令。

【问题讨论】:

    标签: c# wpf caliburn.micro material-design-in-xaml


    【解决方案1】:

    caliburn.micro不应该这样吗?

    <Button x:Name="Accept" Content="Accept"/>
    

    只有在 ViewModel 中使用 ICommand 或 RelayCommand 才能使用 Command="" 语法,或者?至少到目前为止我是这样理解 caliburn.micro 的。

    如果这不起作用,你可以试试这个。这在抽屉主机中对我有用,而 caliburn.micro 命令绑定对我来说失败:

    <Button cal:Message.Attach="[Event Click] = [Action Accept()]" Content="Accept" />
    

    带有对话框示例的其他来源,可能有用:

    https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Dialogs

    https://github.com/Keboo/MaterialDesignInXaml.Examples

    【讨论】:

    • 非常感谢!添加行 cal:Message.Attach="[Event Click] = [Action Save()]" with Content="Accept" 实际上为我完成了这项工作!
    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多