wpf - 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 中。
解决方案
要访问 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)}"
/>
推荐阅读
- kendo-ui - 在菜单栏上显示搜索字段/按钮
- android - Android:如何从 webview 文件选项访问手机上的文件
- python - Mininet 主机上的 pip 找不到已安装的软件包
- java - 在 AWS RDS 中创建 mysql 数据源时出现 Glassfish Keystore 错误
- postgresql - Postgres, Go Docker compose wait-for-it.sh 没有这样的文件或目录
- ios - Realm Platform:如何在应用程序进入后台之前强制同步?
- maven - 在 Maven 中解决依赖关系失败
- python - 使用 google api 的多个地址的纬度/经度
- javascript - 删除/关闭 Firebase 侦听器
- azure - 使 Web Activity 与不是正确 Json 的响应一起工作