【问题标题】:Why do some WPF binding fail against IronRuby properties?为什么某些 WPF 绑定对 IronRuby 属性失败?
【发布时间】:2011-03-23 12:36:28
【问题描述】:

所以,假设我在 C# 和 Ruby 中有两个几乎相同的类:

C#

public class Test
{
    public Test()
    {
        ImageLocation = "http://www.ironruby.net/@api/deki/site/logo.png";
    }

    public string ImageLocation { get; set; }
}

红宝石

class Test
    attr_accessor :ImageLocation

    def initialize
      @ImageLocation = "http://www.ironruby.net/@api/deki/site/logo.png"
    end
end

当我在 C# 中绑定到“ImageLocation”属性时,所有三个控件都正确绑定。当我使用 IronRuby 对象绑定到同一个属性时,它适用于 TextBlock,但对于 TextBoxImage 无效。这是我的 XAML:

<Image Source="{Binding ImageLocation}" Width="50" />
<TextBlock Text="{Binding ImageLocation}" />
<TextBox Text="{Binding ImageLocation}" />

为什么绑定对一个控件有效,而对其他控件无效?

【问题讨论】:

    标签: wpf data-binding binding ironruby


    【解决方案1】:

    Ivan Porto Carrero 的书IronRuby in Action 为您的问题提供了解决方案。参见本书源代码中的databinding.rb

    这绝对不能解决你遇到的问题,我已经自己重现了。

    更新:Shay 的回答也对我有用。

    【讨论】:

    • 我不清楚“解决方案”是什么。我看到他正在解决PropertyNotify 问题......但我看不到他如何解决我遇到的绑定问题。我完全希望我的 XAML 中的所有三个控件都应该在启动时填充......没有更改通知。不幸的是,这没有发生。
    • 是的,我刚刚注意到了。我正在尝试确定您是否在 IronRuby 中发现了名称修改错误。
    • @Brian:很抱歉回答错了问题。我将尝试附加一个测试转换器,看看 绑定的(如果有的话)。
    【解决方案2】:

    IronRuby 类型在 WPF 绑定方面存在一些问题...假设它还不完美 :)

    为了解决您的问题,我建议您使用 CLR 类和类型。例如,要使您的示例代码正常工作,只需转换以下行:

    @ImageLocation = "http://www.ironruby.net/@api/deki/site/logo.png"
    

    到这里:

    @ImageLocation = "http://www.ironruby.net/@api/deki/site/logo.png".to_clr_string
    

    【讨论】:

    • 谢谢,谢伊。这很不幸 :( 在整个 Ruby 空间中到处调用会很麻烦。这是 IronRuby 互操作的问题吗?还是 WPF 数据绑定系统的问题?我想有两种方法可以使这更加自动化......为所有传递给视图的类创建一个装饰器,或者创建一个视图使用的转换器来为你做这件事。
    • 其实很有趣。很快,我添加了一个调用(value as dynamic).to_clr_string(); 的ValueConverter。它说它找不到方法:(我想避免在我漂亮的 Ruby 代码中调用to_clr_string :)
    • 所以,我只是愚蠢。我创建了一个名为 ToStringConverter 的值转换器,它只返回 value != null ? value.ToString() : null; 并将其插入我的 XAML。一切都很好。谢谢,谢伊!
    • 酷!很高兴我能帮助您找到解决方案!
    猜你喜欢
    • 2010-11-29
    • 2011-07-20
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多