我有一个应用程序,我有一个程序集。
在应用程序中,我有一个窗口,在程序集中我有一个用户控件。
窗口中有一个用户控件的实例。
用户控件和窗口都由单独的视图模型支持。
在用户控件中,有一个按钮。应根据用户控件的视图模型的状态启用/禁用该按钮。单击按钮时,需要根据用户控件的视图模型中的信息进行处理,但需要由窗口的视图模型来完成。(需要做的事情的某些方面是并且应该超出用户控制的范围。)
这里有一个转折点 - 该用户控件不会专门在此窗口中使用,它可能会在另一个窗口中使用,或者在第三个窗口中使用的控件中使用。不允许用户控件知道它包含哪种类型的窗口或控件,或者在单击其按钮时正在处理该进程。
那么该怎么办?
在程序集中定义一个命令,并将用户控件的按钮绑定到它,并将用户控件的视图模型作为命令参数传递?那么,如何将命令绑定到窗口的视图模型呢?
或者我应该在用户控件的视图模型中定义命令,然后引发一个事件来告诉父窗口需要采取适当的操作?
我不清楚哪个更干净。
如果您始终知道父级的财产将以相同的名称公开,您可以执行以下操作,这对我来说已经多次有效:
Command={Binding Parent.DataContext.SomeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}
Run Code Online (Sandbox Code Playgroud)
这将获取用户控件,然后转到父级并获取该数据上下文并将其绑定到该命令。当用户控件将被公开相同命令的许多窗口/控件包围时(您可以在此处实现一个接口),此方法有效。
然后,您可以将用户控件的视图模型传递给命令(再次实现一些接口),如下所示:
CommandParaemter={Binding }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12280 次 |
| 最近记录: |