2013-03-22 32 views
3

我在學習WPF,不確定最好的方法是什麼;我有一個員工ID和與該員工相關的圖像作爲項目中的資源(該圖像顯示在員工姓名旁邊的列表中)。這是做什麼的正確方法<Image Source =「../ Images/{Binding Path = Id} .jpg」/>?

所以我覺得這樣的事情

<DataTemplate DataType="{x:Type m:Employee}"> 
     <Grid> 
      <Image Grid.Column="0" Name="image" Source="../Images/{Binding Path=Id}.jpg"/> 

這不是有效的XAML。

我想我可以在代碼隱藏中處理一些數據綁定事件並在那裏創建路徑?對我來說看起來並不理想。

我可以將路徑存儲在我的Employee類中,但那太糟糕了。

感謝

+3

使用轉換器 – 2013-03-22 22:34:57

+0

謝謝,希望能保持它的所有XAML ... – 2013-03-22 22:46:41

+1

如果你想保持它所有在XAML中,你必須使用基於ID值DataTriggers。 '。此外,使用PNG代替支持透明度。 – 2013-03-22 22:52:22

回答

7

你將不得不使用IValueConverter

繼承人一個簡單的例子在String.Format傳遞作爲轉換器paramerter

public class StringFormatToImageSourceConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (parameter is string) 
     { 
      return string.Format(parameter.ToString(), value); 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

用法:

<XXXX.Resources> 
    <local:StringFormatToImageSourceConverter x:Key="StringToImage" /> 
</XXXX.Resources> 

<Image Source="{Binding Path=Id, Converter={StaticResource StringToImage} 
    , ConverterParameter=../Images/{0}.jpg}" /> 

有一種方法將其全部保存在中3210通過使用不可見的TextBlock來格式化字符串,但不是最佳實踐。

<Grid> 
    <TextBlock x:Name="StringToImage" Visibility="Hidden" Text="{Binding Id, StringFormat=../Images/{0}.jpg}" /> 
    <Image Source="{Binding Text, ElementName=StringToImage}"/> 
</Grid> 
+0

希望'StringFormat'直接在主Binding上工作,但它似乎只在目標屬性是'string'類型時才起作用。 +1爲有趣的替代與隱藏文本,即使我永遠不會使用它;) – JYL 2013-03-23 00:20:41

+0

謝謝 - 並很好地瞭解StringFormat太... – 2013-03-24 03:51:28

+1

我用這個轉換器的解決方案。我想知道爲什麼隱藏的文本塊不是最佳實踐。我是WPF的新手,很高興聽到爲什麼不這樣做。謝謝。 – digthewells 2016-06-07 21:16:44

相關問題