【发布时间】:2019-10-23 14:16:34
【问题描述】:
我在静态类中有我的应用程序的配置:
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 中。
【问题讨论】:
-
Program 在这里以两种不同的方式拼写是否相关?
-
啊,不抱歉,只是一个错字。该程序实际上有一个不同的名称,我只是在这里编辑了它。
-
那么一个可重现的例子怎么样? NetworkConfig 和 NetworkConfig.IP 是如何定义的?你在 XAML 中使用
x:Static吗?如果 AppConfig 是一个类,x:Static可以引用该类的成员,仅此而已。不是会员的会员。如果 AppConfig 是 Program.Config 中包含的命名空间,而 NetworkConfig 是该命名空间中的一个类,而 IP 是该 NetworkConfig 类的静态成员,则可以使用。但我猜它是成员的成员。 -
{Binding ID, Source={x:Static config:AppConfig.NetworkConfig}}可能是答案,但您提供的信息太少,无法确定。 -
添加了 MWE,抱歉我没有马上添加。
标签: wpf static namespaces