2010-09-17 103 views

回答

4

此行爲是設計使然。綁定僅適用於依賴項對象的依賴項屬性,而MarkupExtension不是依賴項對象。

5

這是DynamicResource MarkupExtension的錯誤用法。更正爲:

<Image Source="{DynamicResource VM.ImageKey}" /> 

假設你有一個關鍵的「VM.ImageKey」的地方像這樣定義的資源:

<Bla.Resources> 
    <BitmapImage x:Key="VM.ImageKey" UriSource="C:\Uri\To\Image.jpg" /> 
</Bla.Resources> 

但是,如果要綁定對一些物業形態目前DataContext你不能使用DynamicResourceBinding

<Image Source="{Binding VM.ImageKey}" /> 

假設您目前DataContext是具有AP一個實例roperty叫VM至此再次有一個屬性,稱爲ImageKey這是一個派生類型ImageSource

+0

另外,如果ImageKey是一個靜態字段或屬性上VM類,您可以使用{x:Static}語法來檢索它: 其中lcl是爲虛擬機定義的xmlns clr-命名空間。 – 2010-09-17 20:07:59

0

如果要動態指定資源鍵,則應使用ResourceKey標記擴展名指定它 - 但不確定它是否支持您希望的綁定方式。有關更多詳細信息,請參閱here

3

它不能工作,因爲DyamicResource是MarkupExtension而不是dependency property。數據綁定只有適用於依賴屬性。

但是,有一個半平滑的解決方法。創建一個擴展TextBlock的DynamicTextBlock類。

的XAML:

<TextBlock x:Class="Rebtel.Win.App.Controls.DynamicTextBlock" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"/> 

代碼隱藏:

public partial class DynamicTextBlock : TextBlock 
{ 
    public static readonly DependencyProperty TextKeyProperty = DependencyProperty.Register(
     "TextKey", typeof(string), typeof(DynamicTextBlock), new PropertyMetadata(string.Empty, OnTextKeyChanged)); 

    private static void OnTextKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var me = ((DynamicTextBlock)d); 
     if (e.NewValue != null) 
     { 
      me.TextKey = (string) e.NewValue; 
     } 
    } 

    public string TextKey 
    { 
     set { SetResourceReference(TextProperty, value); } 
    } 

    public DynamicTextBlock() 
    { 
     InitializeComponent(); 
    } 
} 

用法:

<local:DynamicTextBlock TextKey="{Binding TextKeyProperty}" /> 

的TextKeyProperty然後返回可以在ResourceDictionary中發現的一個關鍵。 Image和Source屬性可以採用相同的方法。

0

我假設在這種情況下,VM.ImageKey引用了您希望用作資源字典密鑰的數據源的屬性。這個想法是,您的數據源可以通過提供資源密鑰來確定使用哪個圖像。 (這個頁面上的其他大部分答案都是無用的,因爲他們不幸錯過了你想要做的事情,假設你想使用字面文本"VM.ImageKey"作爲資源鍵,我很確定這不是什麼你在問。)

這似乎並不支持,但還有另一種方法,可以使您通過數據綁定確定鍵,選擇一個圖像資源:https://stackoverflow.com/a/20566945/497397