2014-05-22 66 views
2

我在XAML聲明如下:綁定到非依賴對象在Silverlight

<my:CMIconText Icon="Attachment" Text="Logo" /> 

其中CMIconText是一個類從abc.Core.dll來和文本是在類的字符串屬性。

我想使用Staticbinding綁定文本,但由於「文本」不是依賴項屬性,我無法這樣做。問題是我不能將它作爲一個依賴屬性,因爲abc.Core.dll正在被多個其他項目使用。

是否有其他的替代方案,如果不改變的DLL我可以綁定屬性?

感謝,

阿卜迪

回答

0

你可以使用你的對象上的附加依賴項屬性看綁定和靜態傳遞價值給你CMIconText對象。這對於OneWay綁定來說效果更好,但它可以用於雙向綁定。

public class TextBoxExtension 
{ 
    public static readonly DependencyProperty AttachedTextProperty; 

    static TextBoxExtension() 
    { 
     AttachedTextProperty = DependencyProperty.RegisterAttached("AttachedText", typeof (string), typeof (TextBoxExtension), new PropertyMetadata(default(string), TextAttachedChanged)); 
    } 

    public static string GetAttachedText(TextBox sender) 
    { 
     return (string) sender.GetValue(AttachedTextProperty); 
    } 

    public static void SetAttachedText(TextBox sender, string value) 
    { 
     sender.SetValue(AttachedTextProperty, value); 
    } 

    private static void TextAttachedChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     ((TextBox) sender).Text = e.NewValue as string; 
    } 
} 

這將允許你這樣做,在XAML:

<TextBox Grid.Row="0" Grid.Column="1" controls:TextBoxExtension.AttachedText="{Binding Name}" /> 

這比重新實現全班方式簡單。當然,您需要將參考文獻TextBox更改爲您自己的對象。但是因爲我沒有,所以我可以給你一個例子。

0

我會創建一個單獨的類相似的屬性和行爲,但需要依賴性屬性。您可能希望擴展CMIconText(尤其是如果您可以覆蓋Text屬性以提供新的實現;即使將基本屬性更改爲DP也沒有意義,也許可以將其修改爲virtual) 。如果沒有基地Textvirtual,我會避免延長課程。在這種情況下,我會使課程完全分開,並使用適當的方法(或AutoMapper)將/從CMIconText轉換成。

public class SilverlightCMIconText : CMIconText 
{ 
    public override string Text 
    { 
     get { ... } 
     set { ... } 
    } 
} 
<local:SilverlightCMIconText Icon="Attachment" Text="{StaticResource Whatev}" />