public interface IClassA
{
string Description { get; set; }
// more IClassA specific definitions
}
public interface IClassB
{
string Description { get; set; }
// more IClassB specific definitions
}
public class ClassA : IClassA
{
public string Description { get; set; }
}
public class ClassB : IClassB
{
public string Description { get; set; }
}
这是非常简化的代码。为了简单起见,所有类别都缺少INotifyPropertyChanged
实现。只要观察所有代码,就好像它正确实施一样。如何绑定到动态类型的属性?
把Description
成基界面IClassA
和IClassB
可以不予考虑,但,所以我好奇经由数据在WPF结合结合dynamic
性质。这是,我曾尝试:
public class CustomClass
{
public dynamic Instance { get; set; }
// passed instance is a ClassA or ClassB object
public CustomClass(dynamic instance)
{
Instance = instance;
}
}
我的XAML中包含一个TextBlock
,有其DataContext的设置为CutomClass
对象。如果我将Instance
属性的类型更改为IClassA并正确填写,一切都按预期工作。不过与dynamic
不同。
<TextBlock Text="{Binding Instance.Description}" />
在VS2012的XAML设计/ ReSharper的告诉我:无法在类型“对象”的数据上下文解决财产“描述”。
尽管CodeInstance
被描述为dynamic
的类型。但是编译的代码,所以我认为这可能是一个设计时问题。但TextBlock
保持空白。
我可能误解了这种情况下的原理dynamic
,我不知道。因此,使用Google的搜索结果不足可能是由于不完全知道要搜索什么造成的。
您是否在运行时收到绑定错误?什么是错误? – 2013-02-14 01:22:42
绑定已经相当动态,所以你可以使用Object作为实例类型。您仍然会收到设计时警告,但它会在运行时运行。 – 2013-02-14 01:23:25
TextBlock可能是空的,因为没有通知来告诉Xaml它已经改变。 – 2013-02-14 01:37:55