我有一个有for的应用程序,但如果我关闭循环内的窗口,循环将继续到关闭应用程序之前的最后一项。代码是这样的:
这是我的ViewModel中的代码:
private bool _estaCerrada = false;
public bool EstaCerrada
{
get { return _estaCerrada; }
set
{
_estaCerrada = value;
RaisePropertyChangedEvent("EstaCerrada");
}
}
for(int i = 0; i< 2; i++)
{
EstaCerrada = true;
}
这是我的观点:
<Window x:Class="MiAplicaion.Login"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Behaviors="clr-namespace:miAplicacion.Behaviors"
Name="ucPrincipal"
Behaviors:WindowCloseBehavior.IsClose="{Binding EstaCerrada}">
这是我的附属属性,允许我从ViewModel关闭窗口:
using System.Windows;
using System.Windows.Interactivity;
namespace GTS.CMMS.Client.Behaviors
{
public class WindowCloseBehavior
{
public static readonly DependencyProperty IsCloseProperty =
DependencyProperty.RegisterAttached
(
"IsClose",
typeof(bool),
typeof(WindowCloseBehavior),
new UIPropertyMetadata(false, OnIsClosePropertyChanged)
);
public static bool GetIsClose(DependencyObject obj)
{
return (bool)obj.GetValue(IsCloseProperty);
}
public static void SetIsClose(DependencyObject obj, bool value)
{
obj.SetValue(IsCloseProperty, value);
}
private static void OnIsClosePropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs args)
{
if(miVentana != null)
{
if((bool)args.NewValue)
{
miVentana.DataContext = null;
miVentana.Close();
}//((bool)args.NewValue)
}//(miVentana != null)
}//OnIsClosePropertyChanged
}//class WindowCloseBehavior
}
当我将属性EstaCerrada设置为true时,代码以我可以从ViewModel关闭窗口和应用程序的方式工作。
我的问题是我不知道为什么在循环中,当应用程序在第一次迭代中应该关闭时,它必须迭代2次。
我可以解决在将EstaCerada设置为true后添加中断的问题,但我想知道为什么当我关闭窗口时应用程序仍在工作,并且我设置为使视图的DataContext为空。
感谢。