绑定到没有命名空间的类数据
本文关键字:数据 命名空间 绑定 | 更新日期: 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。
如果您创建了一个没有命名空间的类,为什么不将程序集名称放在项目中XAML
或Resources
中的Resources
中,以便使用StringFormat
在其中进行绑定呢
在您的App.xaml.
中
定义类似的内容
<x:String x:Key="AssemblyName">Your Value</x:String>
或者在项目中添加一个新的资源文件并在那里定义它。
所以你可以像这个一样使用它
Text="{Binding Source={StaticResource AssemblyName}, Path=., StringFormat="{}}"