有一种不太规范的方式,利用CommandParameter传递Window对象。<i:Interaction.Triggers>
<i:EventTrigger>
<i:InvokeCommandAction Command="{Binding GetWindow}" CommandParameter="{Binding ElementName=window}"/>
</i:EventTrigger>
</i:Interaction.Triggers>在GetWindow的Action里, 取出object类型的参数转换为Window对象就行了,然后就可以关闭这个窗体。虽然这个方法可行,但这不符合mvvm的设计思想, ViewModel不应该依赖于View。 请问还有其他更好的解决办法吗?
<i:EventTrigger>
<i:InvokeCommandAction Command="{Binding GetWindow}" CommandParameter="{Binding ElementName=window}"/>
</i:EventTrigger>
</i:Interaction.Triggers>在GetWindow的Action里, 取出object类型的参数转换为Window对象就行了,然后就可以关闭这个窗体。虽然这个方法可行,但这不符合mvvm的设计思想, ViewModel不应该依赖于View。 请问还有其他更好的解决办法吗?
我明白你的意思, 不能为了模式而模式。 mvvm的适用场合太局限了,数据绑定方面是很方便,UI和逻辑代码剥离也做的不错(但是不能完全剥离,某些情况用mvvm很别扭)。 我觉得code-Behind + mvvm 混合使用是最好的。 数据绑定用mvvm , 单纯的UI操作用code-Behind 。