这很烦人 - 我知道如何在网上做这件事......
我有一个wpf图像,我想将它的source属性绑定到一个方法,并从它的绑定项传入一个属性。
IE。
<image source="GetMySource({binding name})" />
GetMySource在哪里
protected string GetMySource(string name)
{
return "images/"+name+".png";
}
答案 0 :(得分:4)
这就是.NET不使用方法返回简单对象但CLR属性的原因。你正在使用Java风格,而不是.NET风格。
public string MySource {
get { return "images/" + name + ".png"; }
}
现在该属性已暴露,您有一些选择:
DataBind您的视图(在构造函数中:DataContext = this;
)
&LT; Image source =“{Binding MySource}”/&gt;
为您的UserControl(或其他)命名(<UserControl x:name="this" ...>
)
&LT; Image source =“{Binding MySource,ElementName = this}”/&gt;
使用relativesource绑定
&LT; Image source =“{Binding MySource,RelativeSource = {RelativeSource FindAncestor,AncestorType = UserControl}”/&gt;
编辑:
如果我理解得很好,实际上你想用参数(这里的图像名称)进行绑定。你不能。只有Command绑定允许CommandParameter。您可以使用许多资源声明的ObjectDataProviders或转换器,但这对您的简单工作来说是太多的开销。
您的简单解决方案:对所有图像使用数组,并单向绑定到此数组的各个对象。
private string[] mysource = new[] {
"images/foo.png",
"images/bar.png",
"images/baz.png"};
public string[] MySource {
get { return mySource; }
}
DataBind您的视图(在构造函数中:DataContext = this;
)
&LT; Image source =“{Binding MySource [0]}”/&gt;
我没有测试它,但是下一篇文章的人做了: http://www.codeproject.com/Articles/37352/WPF-Binding-to-individual-collection-items-but-not.aspx