我在xaml中有一个声明如下:
<my:CMIconText Icon="Attachment" Text="Logo" />
其中CMIconText是来自abc.Core.dll的类,Text是该类中的字符串属性。
我想使用Staticbinding绑定Text但是&#34; Text&#34;不是依赖属性我无法这样做。问题是我无法将其作为依赖属性,因为abc.Core.dll正被多个其他项目使用。
还有其他选择,如果不更改dll,我可以绑定属性吗?
谢谢,
阿卜迪
答案 0 :(得分:0)
您可以在对象上使用Attached Dependency Property来观察绑定并将值静态传递给您的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
的引用更改为您自己的对象。但是因为我没有它,所以我能给你一个最近的例子。
答案 1 :(得分:0)
我会创建一个单独的类类似的属性和行为,但需要依赖属性。您可能希望扩展CMIconText
(特别是如果您可以覆盖Text
属性以提供新的实现;即使将基本属性更改为DP也没有意义,也许您可以将其修改为virtual
)。如果不能将基础Text
设为virtual
,我会避免扩展课程。在这种情况下,我会使用适当的方法(或AutoMapper)将类转换为/ CMIconText
。
public class SilverlightCMIconText : CMIconText
{
public override string Text
{
get { ... }
set { ... }
}
}
<local:SilverlightCMIconText Icon="Attachment" Text="{StaticResource Whatev}" />