2010-03-29 54 views
2

编写这是烦人 - 我知道我怎么会做它在网页...WPF绑定背后方法

我有一个WPF图像,我想结合它的源属性的方法,并传入来自它的绑定项目的属性。

IE。

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

哪里GetMySource是

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

没关系,我解决了这个问题,现在另一种方式。我确信这是我需要做的一些事情,但我不想使用转换器,所以如果任何人有一个好的答案。 – 2010-03-30 13:39:25

+0

您能标记Aurelien为正确的或发布您的答案,请帮助其他人寻找类似的答案:) – Chris 2010-04-08 23:44:28

+0

但他们都没有给我我需要的答案,我打开它以防万一有人知道正确的答案。 – 2010-04-09 06:05:08

回答

4

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

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

现在的财产暴露,你有一些选择:

  1. 的DataBind你的观点本身(在构造函数中:DataContext = this;

    <图片来源= “{结合MYSOURCE}” />

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

    <图像源= “{结合MYSOURCE,的ElementName =此}”/>

  3. 使用的RelativeSource结合

    <图像源=“{结合MYSOURCE,的RelativeSource = {的RelativeSource FindAncestor,AncestorType =用户控件} “/>

编辑:

如果我没理解好,其实你想要做的一个参数绑定(名这里的图像)。你不能。只有Command绑定允许CommandParameter。你可以使用许多资源声明的ObjectDataProviders或Converters,但这对于你的简单工作来说开销太大。

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

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

    <图像源= “{结合MYSOURCE [0]}”/>

  2. ...等。

我没有测试,但是从下面的文章的人做的事: http://www.codeproject.com/Articles/37352/WPF-Binding-to-individual-collection-items-but-not.aspx

+0

OK,我们已经很接近了,所以也许如果我使用CPR特性如图过去后我要澄清我的要求:) ,我的形象生活已经使用itemssouce绑定列表视图中。因此“名称”来自应用于列表视图的绑定。 图像是列表视图里,我需要现在说“来源=” {结合MYSOURCE(名称)}” - 或任何适当的命令,你给我:) – 2010-03-29 14:40:14

+0

如果图像的来源取决于该项目,则物业可能进去类,它表示每一个项目。 – 2010-03-29 14:57:55

+1

该项目的名称是在那里,我需要的根源是灵活的,这是在世界上ASP.NET的最简单的事情,为什么WPF必须如此该死的困难。 – 2010-03-29 20:32:45