WPF绑定到代码隐藏方法

时间:2010-03-29 13:14:58

标签: wpf binding code-behind

这很烦人 - 我知道如何在网上做这件事......

我有一个wpf图像,我想将它的source属性绑定到一个方法,并从它的绑定项传入一个属性。

IE。

<image source="GetMySource({binding name})" />

GetMySource在哪里

protected string GetMySource(string name)
{
return "images/"+name+".png";
}

1 个答案:

答案 0 :(得分:4)

这就是.NET不使用方法返回简单对象但CLR属性的原因。你正在使用Java风格,而不是.NET风格。

public string MySource {
  get { return "images/" + name + ".png"; }
}

现在该属性已暴露,您有一些选择:

  1. DataBind您的视图(在构造函数中:DataContext = this;

    &LT; Image source =“{Binding MySource}”/&gt;

  2. 为您的UserControl(或其他)命名(<UserControl x:name="this" ...>

    &LT; Image source =“{Binding MySource,ElementName = this}”/&gt;

  3. 使用relativesource绑定

    &LT; Image source =“{Binding MySource,RelativeSource = {RelativeSource FindAncestor,AncestorType = UserControl}”/&gt;

  4. 编辑:

    如果我理解得很好,实际上你想用参数(这里的图像名称)进行绑定。你不能。只有Command绑定允许CommandParameter。您可以使用许多资源声明的ObjectDataProviders或转换器,但这对您的简单工作来说是太多的开销。

    您的简单解决方案:对所有图像使用数组,并单向绑定到此数组的各个对象。

    private string[] mysource = new[] {
      "images/foo.png", 
      "images/bar.png", 
      "images/baz.png"};
    public string[] MySource {
      get { return mySource; }
    }
    
    1. DataBind您的视图(在构造函数中:DataContext = this;

      &LT; Image source =“{Binding MySource [0]}”/&gt;

      1. ...等
    2. 我没有测试它,但是下一篇文章的人做了: http://www.codeproject.com/Articles/37352/WPF-Binding-to-individual-collection-items-but-not.aspx