WPF - 将VM属性绑定到UI对象的方法

时间:2016-06-17 14:36:37

标签: c# wpf mvvm binding

这完全是人们通常做的事情的逆转,所以我能找到的每一个信息都是关于将UI属性绑定到VM方法。

TL; DR

MVVM。 VM中的代码,通过通常的命令委托管理按钮上的单击的方法;在这种情况下,我完全正确地与UI分离。但是......从这里开始,我需要在UI容器内的UI控件上调用一个方法,这个VM容器绑定到该容器。这怎么可能?我可以以某种方式向VM添加属性,以便将属性值绑定到我需要调用的方法的XML中吗?

编辑更好地解释

用户按“打印”按钮。 VM接收命令。一切都是MVVM; VM对UI一无所知。我想尝试不破坏MVVM范例。

现在,用户按下“打印”按钮,因为他希望在纸上获得UI上许多Usercontrol的精确副本,因此我必须在每个上面调用一个方法,以便返回其位图表示。那些用户控件不公开“Bitmap”属性,我需要调用他们的方法。

2 个答案:

答案 0 :(得分:0)

您可以创建一个名为IBitmapProvider的界面或类似的东西。给它一个像GetBitmap()的方法。让您的视图继承此接口。将界面传递给视图模型的构造。在命令上调用IBitmapProvider方法。

答案 1 :(得分:0)

如果没有一个更具体的问题,包括一个很好地显示你想要做的事情的Minimal, Complete, and Verifiable code example,就不可能确切知道最佳答案是什么。那说......

您的视图模型不应该处理打印命令。你的观点应该处理那个。使用ApplicationCommands.Print或等效项,在视图中为Executed事件处理程序创建命令绑定。视图模型根本不需要了解任何有关打印的信息。

此外,您提到使用位图,但实际上也没有必要这样做。打印API允许您直接打印Visual;首先将Visual渲染到位图然后打印位图是一种浪费,并且还会产生令人头疼的问题,试图将预期的输出分辨率与打印机的实际分辨率相匹配。

您可以直接打印实际的UI Visual对象,也可以使用您用于视图的相同模板在新ContentControl中引用现有的视图模型,甚至打印 - 如有必要,可以使用特定模板。有多种方法可以实现这一目标;你可以在另一个问题中找到一个简单的例子in an answer I provided