首页 > 解决方案 > WPF - 访问不同命名空间中的静态类

问题描述

我在静态类中有我的应用程序的配置:

namespace Program.Config
{
  static Class AppConfig
  {
    ...
  } 
}

现在,在我的xaml我想访问这个配置。

所以,我补充说

xmlns:config="clr-namespace:Program.Config"

我的看法是Program.Views

但是,访问AppConfig类似

config:AppConfig.ConnectionConfig.conParam.ethPort

不起作用。

从 WPF 中的不同命名空间访问静态类成员的正确方法是什么?

编辑:

好的,这里有一个 MWE:

MainWindow.xaml.cs

using System.Threading;
using System.Windows;
using Program.ViewModels;

namespace Program
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            MainVM vm = new MainVM();
            DataContext = vm;
            InitializeComponent();
        }
    }
}

`MainVM.cs

using Prism.Mvvm;
using System;

namespace Program.ViewModels
{
    internal class MainVM : BindableBase
    {
        public MainVM()
        {

        }

    }
}

`MainWindow.xaml

<Window x:Class="Program.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:config="clr-namespace:Program.Config"
        mc:Ignorable="d"
        Title="MainWindow" Height="700" Width="1000">


    <DockPanel LastChildFill="False">
        <Label Content="Port is:" />
        <Label Content="{Binding config:AppConfig.ConnectionConfig.conParam.ethPort}" />
    </DockPanel>
</Window>

Config.cs

namespace Program
{
    using Program.Config;

    public struct ConnectionParameters
    {
        public int ethPort { get; set; }
        public string ethIp { get; set; }
    }

    public static class AppConfig
    {
        public static ConnectionConfObj ConnectionConfig { get; set; }

        static AppConfig()
        {
            ConnectionConfig = new ConnectionConfObj();
        }
    }
}

namespace Program.Config
{
    public abstract class ConfigBase
    {
        public string filepath { get; set; }
    }

    public class ConnectionConfObj : ConfigBase
    {
        public ConnectionParameters conParam { get; set; }

        public ConnectionConfObj()
        {
            ConnectionParameters _conParam = new ConnectionParameters();
            _conParam.ethPort = 8;

            conParam = _conParam;
        }
    }

}

在程序的范围内,配置的结构是这样有意义的,因为我从不同的来源读取了多个配置,并希望将它们呈现在程序的一个 AppConfig 中。

标签: wpfstaticnamespaces

解决方案


要访问 XAML 中的静态类成员(包括枚举值),请使用x:Static 标记扩展,如下所示:({x:Static nmspc:ClassName.MemberName}{x:Static nmspc:EnumTypeName.EnumValueName}-- 枚举值实际上是静态类的静态成员)。您会得到一个命名空间前缀、一个可选地以中间命名空间开头的类名和一个成员名,仅此而已。如果您需要 的属性MemberName,请将静态引用设置为绑定的源。一个 Binding 可以有一个属性的属性的路径:

<Label 
    Content="{Binding conParam.ethPort, Source={x:Static config:AppConfig.ConnectionConfig)}" 
    />


推荐阅读