从代码隐藏访问类的XAML实例

时间:2015-10-15 17:09:19

标签: c# wpf xaml

我曾经在app.xaml.cs中定义了自定义类的实例,因此我可以在应用程序的任何位置访问它。我现在怎么改变它,以便在我的应用程序资源中创建我的类的实例。

的App.xaml

<Application x:Class="Duplicate_Deleter.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Duplicate_Deleter">
    <Application.Resources>
        <local:runtimeObject x:Key="runtimeVariables" />
    </Application.Resources>
</Application>

App.xaml.cs 这是班级。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace Duplicate_Deleter
    /// <summary>
    /// Global values for use during application runtime
    /// </summary>
    public class runtimeObject
    {
        //Can the application be closed?
        private bool _inProgress = false;
        public bool inProgress
        {
            get { return _inProgress; }
            set { _inProgress = value; }
        }

        //Selected folder to search in
        private string _fromFolder = "testing string";
        public string fromFolder
        {
            get { return _fromFolder; }
            set { _fromFolder = value; }
        }
    }
}

我现在的问题是,我需要能够在我的命令命名空间中的代码中访问该类的实例。您可以在下面看到其中一个命令,App.runtime用于在实例位于App.xaml.cs中时工作。

课程&gt; Commands.cs

public static void CloseWindow_CanExecute(object sender,
                           CanExecuteRoutedEventArgs e)
        {
            if (App.runtime.inProgress == true)
            {
                e.CanExecute = false;
            }
            else
            {
                e.CanExecute = true;
            }
        }

我现在如何从命令中引用我的类实例?

1 个答案:

答案 0 :(得分:2)

您可以在代码中的任何位置使用TryFindResource:

public static void CloseWindow_CanExecute(object sender,
                       CanExecuteRoutedEventArgs e)
    {
        // Find the resource, then cast it to a runtimeObject
        var runtime = (runtimeObject)Application.Current.TryFindResource("runtimeVariables");

        if (runtime.InProgress == true)
        {
            e.CanExecute = false;
        }
        else
        {
            e.CanExecute = true;
        }
    }

如果找不到资源,它将返回null。您可以添加空检查以避免InvalidCastException。