XAML从View模型关闭窗口

时间:2013-10-02 16:02:46

标签: c# wpf xaml mvvm

我有一个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的任何代码。

3 个答案:

答案 0 :(得分:0)

ViewModel不应该有窗口引用,命令不应该在它的参数中发送它。如果你只想关闭窗口,你可以在后面的代码中执行它,或者如果你仍想在命令中执行它,那么你可以在Application.Current.Windows命令处理程序中找到你的窗口引用并关闭它。

答案 1 :(得分:0)

虽然我同意这些人所说的可以使用MVVM背后的代码,但我有一个可能的解决方案。

首先,声明Name的{​​{1}}属性。然后你可以从几乎任何地方访问窗口:

Window

我也同意视图模型这样做的地方,但它是你的代码。 :)

答案 2 :(得分:0)

<Button Command="{Binding _ICommandExit}" 
       CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>