C# 从childwindow添加某些项目后冻结主窗口

C# 从childwindow添加某些项目后冻结主窗口,c#,.net,silverlight,entity-framework,mvvm,C#,.net,Silverlight,Entity Framework,Mvvm,我正在使用mvvm和WCF服务开发Silverlight 4 每当我将项目从子窗口添加到主窗口时。但同时主窗口自动进入禁用模式。我想主窗口会自动冻结 子窗口视图模型 public class AddFormFieldInformationViewModel : ViewModelBase { private FieldInformationViewModel _FieldInformationViewModel; public FieldInformationViewMod

我正在使用mvvm和WCF服务开发Silverlight 4

每当我将项目从子窗口添加到主窗口时。但同时主窗口自动进入禁用模式。我想主窗口会自动冻结

子窗口视图模型

    public class AddFormFieldInformationViewModel : ViewModelBase
{


 private FieldInformationViewModel _FieldInformationViewModel;
    public FieldInformationViewModel FieldInformationViewModel
    {
        get { return _FieldInformationViewModel; }
        set
        {
            _FieldInformationViewModel = value;
            RaisePropertyChanged("FieldInformationViewModel");
        }
    }
 public void MoveSave(object obj)
    { this.FieldInformationViewModel.SelectedFormFields = FieldInformationModel;
                            ResultHandler(true);
 }
public class FieldInformationViewModel : ViewModelBase
{   private void executeOpenChildWindow(object parameter)
    {
        AddExistingFormFieldCategoryView cw = new AddExistingFormFieldCategoryView();
        ((AddFormFieldInformationViewModel)cw.DataContext).FieldInformationViewModel = this;
        cw.Show();
    }
}
公共操作ResultHandler{get;set;} }

ChildWindow.xaml.cs文件

public partial class AddExistingFormFieldCategoryView : ChildWindow
{
    private AddFormFieldInformationViewModel vm;
    public AddExistingFormFieldCategoryView()
    {
        InitializeComponent();
         vm = new AddFormFieldInformationViewModel();
        this.DataContext = vm;
        vm.ResultHandler = result => { if (result) { Close(); } };

    }        
}
主窗口视图模型

    public class AddFormFieldInformationViewModel : ViewModelBase
{


 private FieldInformationViewModel _FieldInformationViewModel;
    public FieldInformationViewModel FieldInformationViewModel
    {
        get { return _FieldInformationViewModel; }
        set
        {
            _FieldInformationViewModel = value;
            RaisePropertyChanged("FieldInformationViewModel");
        }
    }
 public void MoveSave(object obj)
    { this.FieldInformationViewModel.SelectedFormFields = FieldInformationModel;
                            ResultHandler(true);
 }
public class FieldInformationViewModel : ViewModelBase
{   private void executeOpenChildWindow(object parameter)
    {
        AddExistingFormFieldCategoryView cw = new AddExistingFormFieldCategoryView();
        ((AddFormFieldInformationViewModel)cw.DataContext).FieldInformationViewModel = this;
        cw.Show();
    }
}

将项目从子窗口添加到主窗口后,有时我的主窗口会自动冻结。

您好,这是您遇到的一个错误,请参见下面的示例。我遇到同样的问题,您必须手动启用主页的显示:

        private static void ShowError(string message, string details)
        {
            ErrorWindow error = new ErrorWindow(message, details);
            error.Closed += new EventHandler(error_Closed);
            error.Show();
        }

        static void error_Closed(object sender, EventArgs e)
        {
            Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, true);
        }

您可以将ChildWindow子类化,并显式地将RootVisual设置为enabled

使用System.Windows.Ink;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Animation;
使用System.Windows.Shapes;
命名空间DST_公共_Silverlight_控件
{
/// 
///ChildWindow中的错误有时会使应用程序处于禁用状态。
/// 
公共类ChildWindowEx:ChildWindow
{
关闭时受保护的覆盖无效(事件参数e)
{
基础。一旦关闭(e);
Application.Current.RootVisual.SetValue(Control.IsEnabledProperty,true);
}
}
}
然后在xaml中使用新类型而不是ChildWindow,如下所示:

<slcommon:ChildWindowEx 
    x:Class="DST.AvSyncMonitor.Silverlight.Gui.ErrorWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:slcommon="clr-namespace:DST_Common_Silverlight_Controls;assembly=DST.Common.Silverlight.Controls"
    xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"    
    Title="Error">

    <Grid x:Name="LayoutRoot" Width="540">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <TextBlock x:Name="IntroductoryText" Grid.Row="0" Margin="0" 
             Text="An unknown error was encountered. Please contact your administrator for more information."/>

        <StackPanel x:Name="ContentStackPanel" Grid.Row="2" Margin="0,6,0,0">

            <TextBlock x:Name="LabelText" TextWrapping="Wrap" Margin="0,0,0,2" 
                     Text="Error details"/>
            <TextBox x:Name="ErrorTextBox" Height="90" TextWrapping="Wrap" IsReadOnly="True"
                     VerticalScrollBarVisibility="Auto"/>

        </StackPanel>

        <Button x:Name="OKButton" Grid.Row="3" Click="OKButton_Click" 
            Width="75" Height="23" HorizontalAlignment="Right" Margin="0,10,0,0" 
            TabIndex="0" Content="OK"/>

    </Grid>

</slcommon:ChildWindowEx>