Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从WP7中的视图模型更改控件模板?_C#_Silverlight_Windows Phone 7_Mvvm_Mvvm Light - Fatal编程技术网

C# 如何从WP7中的视图模型更改控件模板?

C# 如何从WP7中的视图模型更改控件模板?,c#,silverlight,windows-phone-7,mvvm,mvvm-light,C#,Silverlight,Windows Phone 7,Mvvm,Mvvm Light,嗨,基本上我已经能够将我的逻辑完全分离成一个视图模型,除了一件事。我有一个按钮和两个不同的模板,可以应用到按钮。基本上,当播放音频时,会显示一个模板,而当不播放时,会显示另一个模板。当我使用后面的代码时,这很容易,因为我可以访问页面的资源,我所要做的就是相应地设置它。现在我的代码已经在VM中了,但我不确定如何更改模板 我想到的第一个想法是,可能会在需要时向视图发送一条消息来更改它。这是唯一的办法吗?我确实看到WPF有一些触发器,看起来很不错,因为您不必发送消息,而且代码背后也没有代码。有人找到了

嗨,基本上我已经能够将我的逻辑完全分离成一个视图模型,除了一件事。我有一个按钮和两个不同的模板,可以应用到按钮。基本上,当播放音频时,会显示一个模板,而当不播放时,会显示另一个模板。当我使用后面的代码时,这很容易,因为我可以访问页面的资源,我所要做的就是相应地设置它。现在我的代码已经在VM中了,但我不确定如何更改模板


我想到的第一个想法是,可能会在需要时向视图发送一条消息来更改它。这是唯一的办法吗?我确实看到WPF有一些触发器,看起来很不错,因为您不必发送消息,而且代码背后也没有代码。有人找到了解决方法吗?

您可能可以编写一个
值转换器
,查看
公共bool isplay
属性并将其转换为适当的模板。然后,您可以使用转换器作为转换器,将
按钮
模板属性数据绑定到
IsPlaying
属性

我没有在模板上尝试过,但我在
位图
可见性
上使用过它,取得了巨大的成功,所以我很确定它在这里也会起作用

这是一个,如果你以前没用过的话

也就是说,在这种情况下,消息传递并不是一个可怕的解决方案。有时,有些代码只想保存在codebehind文件中。动画开始/停止代码是我想到的另一个例子