【问题标题】:How to bind button Content to Dynamic Resource programmatically如何以编程方式将按钮内容绑定到动态资源
【发布时间】:2012-04-13 07:15:25
【问题描述】:

我正在尝试以编程方式将我的 WPF 按钮的 Content 属性绑定到我之前使用给定路径定义的动态资源(业务对象)。到目前为止,我尝试了以下方法,但没有成功:

我的业务对象被定义为资源:

<Window.Resources>
   <env:PartyType x:Key="myParty" FullName="JOHN"/>
</Window.Resources>

我尝试像这样以编程方式绑定到我的按钮:

        Binding binding = new Binding();
        binding.Source = this.Resources["myParty"];
        binding.Path = new PropertyPath("FullName");
        btn.SetBinding(ContentProperty, binding);

但显然,当我序列化为 XAML 时,它试图序列化整个派对对象,而我只想保留对我的资源的绑定引用,所以这个选项不起作用。 我的第二个选择是:

btn.SetResourceReference(ContentProperty,"myParty");

这会被序列化为 XAML:

<av:Button Content="{av:DynamicResource myParty}"/>

但我不知道如何指定我的 Path=FullName,以便它可以显示 Party.FullName 而不是 Party.Type()

关于如何实现这一点的任何想法?

提前致谢,

【问题讨论】:

    标签: c# wpf xaml binding code-behind


    【解决方案1】:

    将动态资源分配给DataContext,然后在不设置Source 属性的情况下创建绑定

    btn.SetResourceReference(DataContextProperty,"myParty");
    
    Binding binding = new Binding();
    binding.Path = new PropertyPath("FullName");
    btn.SetBinding(ContentProperty, binding);
    

    现在如果你已经依赖按钮的DataContext,那么你需要设置一个Label作为按钮的内容,并在标签上设置资源和绑定。

    【讨论】:

    • 谢谢西蒙,那部分工作得很好。现在,我决定在 XAML 中为父控件 (Canvas) 设置 DataContext。一切正常,但是当我加载序列化的 XAML 时,它不显示绑定的数据,有什么想法吗?
    • @AdolfoPerez,序列化的 XAML 是否包含绑定?我唯一的猜测是绑定没有被序列化。
    • 是的,序列化 XAML 包含如下绑定:&lt;av:Button Content="{av:Binding Path=FullName, Source={x:Null}}" 当我检查我重新生成的对象时,它确实包含绑定,但由于某种原因,内容设置为 null
    • 嗯,尝试在输出窗口中查找绑定错误。前段时间我写了一篇关于调试数据绑定的文章,你可以找到它here,我认为它应该能让你弄清楚为什么绑定不能按预期工作。
    • 我必须这样做。再次感谢您的所有帮助@SimonBangKerkildsen
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2011-01-07
    • 2016-08-01
    • 1970-01-01
    • 2011-05-22
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多