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

本文关键字:数据 命名空间 绑定 | 更新日期: 2023-09-27 18:01:44

场景

我有一个类,看起来像这样:

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

该类NOT包含在命名空间中。

我尝试使用以下代码绑定到这个,但没有成功:

Text="{Binding GlobalAssemblyInfo.AssemblyName}"

 

问题

这可能吗?如果可能,我将如何实现?

 

为什么我需要这个

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

我正在创建一个应用程序,由于商标问题,该应用程序可能需要进行重命名。我需要在几个地方使用这个名称,例如"MyApp Contributors"或"MyApp Help"。使用绑定可以使我只说Text="{Binding AppName, StringFormat='{}{0} Contributors'}"

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

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

{绑定源={x:Staticns:Class.StaticProperty}}

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

xmlns:myGlobal="clr-namespace:;assembly=">

在第一个示例中,您将使用myGlobal代替ns。

如果您创建了一个没有命名空间的类,为什么不将程序集名称放在项目中XAMLResources中的Resources中,以便使用StringFormat 在其中进行绑定呢

在您的App.xaml.

定义类似的内容

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

或者在项目中添加一个新的资源文件并在那里定义它。

所以你可以像这个一样使用它

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