绑定到没有命名空间的类数据

时间:2014-05-03 20:04:02

标签: c# wpf .net-4.0

方案

我有一个看起来像这样的课程:

class GlobalAssemblyInfo
{
    public const string AssemblyName = "MyAppName";
}

该名称空间中包含 NOT

我尝试使用以下代码绑定到此处失败:

Text="{Binding GlobalAssemblyInfo.AssemblyName}"

问题

这是可能的,如果是这样,我将如何实现这一目标?

为什么我需要这个

在我收到关于仅使用绑定动态更改内容的任何评论之前,让我解释一下为什么我需要这个。

我正在创建一个可能需要因商标问题而重命名的应用。我需要在几个地方使用该名称,例如“MyApp Contributors”或“MyApp Help”。使用绑定可以让我只说Text="{Binding AppName, StringFormat='{}{0} Contributors'}"

2 个答案:

答案 0 :(得分:1)

如果您创建了一个没有命名空间的类,为什么不在项目的ResourcesXAML中将您的程序集名称放在Resources中,这样您就可以进行绑定在其中StringFormat

App.xaml.

定义类似这样的内容

<x:String x:Key="AssemblyName">Your Value</x:String>

或在项目中添加新资源文件并在那里定义。

所以你可以使用类似这样的东西

Text="{Binding Source={StaticResource AssemblyName}, Path=., StringFormat="{}}"

答案 1 :(得分:1)

这里有两个问题。首先,您在绑定中使用类的方式是将其分配给Path,因此它会在您的DataContext上查找名为GlobalAssemblyInfo的属性。您需要使用静态源,并将值作为属性而不是const公开。这使用以下形式:

{Binding Source = {x:Static ns:Class.StaticProperty}}

另一个问题是你没有命名空间来在XAML中创建你的xmlns。您应该考虑是否真的需要该类不被命名空间,但如果您这样做,您应该能够使用奇怪的构造

的xmlns:myGlobal = “CLR-名称空间:;装配=”

然后在第一个示例中使用myGlobal代替ns。