我有一个WPF窗口,datacontext在XAML中实例化
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="clr-namespace:Contratos.ViewModels" x:Class="Contratos.Views.TipoAsociadoAcopio"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"
xmlns:l="clr-namespace:Recursos;assembly=Recursos"
xmlns:controls="clr-namespace:Recursos.Controls;assembly=Recursos"
xmlns:resources="clr-namespace:ModelSeguridad.Resources;assembly=ModelSeguridad"
Title="{x:Static resources:Labels.CONTRATO_TipoContratoAcopio}" Height="Auto" Width="Auto">
<Window.Resources>
<CollectionViewSource x:Key="ListaItems" Source="{Binding ListaItems}"/>
<ViewModels:TipoAsociadoVM x:Key="ViewDataContext"/>
</Window.Resources>
<Grid>
<StackPanel>
<Button Command="{Binding _ICommandExit}" CommandParameter="{W H A T H E R E}" />
</StackPanel>
</Grid>
我需要在用户单击“退出”按钮时关闭此窗口,我的问题是如何使用XAML实例化将窗口引用发送到viewmodel。
我正在尝试维护MVVM模式,因为我没有关于mi codebehind的任何代码。
答案 0 :(得分:0)
ViewModel不应该有窗口引用,命令不应该在它的参数中发送它。如果你只想关闭窗口,你可以在后面的代码中执行它,或者如果你仍想在命令中执行它,那么你可以在Application.Current.Windows
命令处理程序中找到你的窗口引用并关闭它。
答案 1 :(得分:0)
虽然我同意这些人所说的可以使用MVVM背后的代码,但我有一个可能的解决方案。
首先,声明Name
的{{1}}属性。然后你可以从几乎任何地方访问窗口:
Window
我也同意视图模型不这样做的地方,但它是你的代码。 :)
答案 2 :(得分:0)
<Button Command="{Binding _ICommandExit}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>