2010-03-29 53 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