如何在XAML中定义对现有对象的引用?

Pom*_*oma 3 .net c# wpf xaml

我想缩短设置绑定

{Binding Source={x:Static properties:Settings.Default}, Path=Password}
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

{settingsBinding Password}
Run Code Online (Sandbox Code Playgroud)

通过将声明的一部分移动到全局资源字典.但似乎我不能在这里声明绑定.任何想法如何解决这个问题?

我想至少让它像这样

{Binding Source={StaticResource Settings}, Path=Password}
Run Code Online (Sandbox Code Playgroud)

所以我不必每次都包含属性命名空间.

Jul*_*ain 5

要获得第一个语法,您必须派生Binding并指定源:

public class SettingsBinding : Binding {
    public SettingsBinding(string path) : base(path) { Source = Settings.Default; }
    public SettingsBinding() { Source = Settings.Default; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:{xxx:SettingsBinding Password}.但是,您仍然需要指定此类的命名空间.我不会推荐这种方法:绑定往往非常冗长,但你知道发生了什么,因为语法总是相同的.

要获得您想要的第二种语法,只需将您定义x:Static为资源,例如:

<Window.Resources>
    <x:Static Member="properties:Settings.Default" x:Key="Settings" />
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

您现在可以使用它来引用它StaticResource.

  • +1; 这是一个很好的解决方案,专门解决OP提出的问题.**但是**,我认为Tod的答案是OP应该实现的.不要在视图中绑定 - 绑定到视图模型,并让视图模型转发"Password"的值.这将减少代码中的耦合. (2认同)