我有一个 WPF 应用程序,由 Caliburn.Micro 提供支持,视图模型优先方法。有一种命令栏类型的控件,其CommandBarView.xaml并绑定命令栏视图模型。命令栏虚拟机包含许多嵌套虚拟机,每个虚拟机对应一个按钮控件,所有虚拟机都显示通用界面并具有通用行为。命令栏虚拟机公开它们,以便可以从视图中绑定它们:
public interface IWarningButtonViewModel
{
bool IsVisible { get; }
bool CanShowWarning { get; }
void ShowWarning();
}
public class CommandBarViewModel : PropertyChangedBase
{
public IWarningButtonViewModel UserNotFoundWarning { get; private set; }
public IWarningButtonViewModel NetworkProblemWarning { get; private set; }
// ... initialization omitted for simplicity
}
这是 CommandBarView 的暂定 XAML:
<Button x:Name="UserNotFoundWarning_ShowWarning"
IsEnabled="{Binding UserNotFoundWarning.CanShowWarning}">
...
<DataTrigger Binding="{Binding UserNotFoundWarning.IsVisible}" Value="True">
...
</Button>
通过这种方式,我能够成功绑定两个属性(可以显示警告, 可见)但我无法将按钮命令/操作绑定到显示警告 method.
我尝试过深度属性绑定 https://joshearl.wordpress.com/2011/03/24/deep-property-databinding-with-caliburn-micro/这同样适用于属性,但不适用于行动。
我也尝试过混合使用cal:Model.Bind
and cal:Message.Attach
:
<Button cal:Model.Bind="{Binding UserNotFoundWarning}"
cal:Message.Attach="[Event Click] = [Action ShowWarning]"
IsEnabled="{Binding CanShowWarning}">
...
<DataTrigger Binding="{Binding IsVisible}" Value="True">
...
</Button>
这似乎在运行时有效,但是cal:模型.绑定使 VS 设计器完全无法使用,UI 控件不显示。
我已经搜索了很多,但我找不到一个实际的解决方案,让我也可以与设计师合作。对我来说,我只能找到属性深度绑定的示例,而不能找到操作的示例,这似乎很奇怪。
知道如何解决这个问题吗?