2013-10-01 48 views
1

我想要一個圖像和文本的按鈕,並使用綁定到我的ButtonCommandViewModel。我的ButtonCommandViewModel中需要什麼類型的屬性來綁定圖像,以符合MVVM概念?我應該只有一個Image,URL或某種類型的Image標籤可以通過轉換器運行的字符串嗎?如何在MVVM樣式中進行圖像綁定?

<Button Command="{Binding Command}"> 
    <Button.ContentTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Image /> 
       <TextBlock Text="{Binding DisplayName}" /> 
      </StackPanel> 
     </DataTemplate> 
    </Button.ContentTemplate> 
</Button> 

上述xaml是我正在嘗試用於項目模板。

回答

5

您必須綁定Image控件的Source屬性,該屬性的類型爲ImageSource

WPF內置了從string,Uribyte[]ImageSource的轉換,而不需要綁定轉換器。

只要您的圖像可以從URI字符串或字節數組(包含編碼的位圖框架,例如PNG)創建,您可以選擇您喜歡的屬性類型。 string可能是最簡單的一個,但其他人也完全合法。

但是,當您的ViewModel動態創建圖像時,ImageSource(或派生類型)通常是更合適的選項,而不使用綁定轉換器。

+0

@Clemens的好回答。請注意,由於「包裝在WPF中的Uris」,您很可能會遇到問題,但不用擔心,Clemens也會覆蓋以下內容:http://clealoverflow.com/a/14859050/27083 – tobsen

+0

@Clemens,how關於一個字節數組而不是ImageSource?然後我們可以使用一個值轉換器來獲取一個bitmapimage。 –

+0

字節數組也自動轉換爲ImageSource。 – Clemens

1

您應該只使用Uri。你想從數據中分離UI,所以不要把控件放在ViewModel中。至少,這就是我教過的東西。

1

是的,使用Uri /字符串(我更喜歡Uri)來綁定Image.Source屬性。

<Image Source="{Binding SourceUri}" /> 

除此之外,請牢記以下幾點。 1.將圖像添加到項目時,確保Build操作設置爲「Resource」。 2.如果您想從另一個項目使用pack Uri訪問圖像。

相關問題