我有一个使用Caliburn.Micro驱动的WPF应用程序,采用视图模型优先的方法。有一个命令栏类型的控件,使用CommandBarView.xaml和绑定的CommandBarViewModel。命令栏VM包含多个嵌套VM,每个按钮控件都有一个VM,它们展示了一个公共接口,并具有公共行为。命令栏VM将它们公开以便从视图中进行绑定。
这是一个关于CommandBarView的初步XAML示例:
以这种方式,我可以成功地绑定两个属性(CanShowWarning,IsVisible),但我无法将按钮命令/操作绑定到ShowWarning方法。
我尝试使用深度属性绑定,这对于属性再次起作用,但不适用于操作。 我还尝试了cal:Model.Bind和cal:Message.Attach的混合使用:
似乎在运行时可以正常工作,但是cal:Model.Bind会使VS设计器完全无法使用,UI控件不会显示。
我已经搜索了很多,但我找不到一个真正的解决方案,让我也能够与设计器一起工作。对我来说很奇怪,我只能找到属性的深层绑定示例,而不是操作的深层绑定示例。
有什么想法如何解决这个问题吗?
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>
以这种方式,我可以成功地绑定两个属性(CanShowWarning,IsVisible),但我无法将按钮命令/操作绑定到ShowWarning方法。
我尝试使用深度属性绑定,这对于属性再次起作用,但不适用于操作。 我还尝试了cal:Model.Bind和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:Model.Bind会使VS设计器完全无法使用,UI控件不会显示。
我已经搜索了很多,但我找不到一个真正的解决方案,让我也能够与设计器一起工作。对我来说很奇怪,我只能找到属性的深层绑定示例,而不是操作的深层绑定示例。
有什么想法如何解决这个问题吗?