这是
WPF Control's Nested property's data binding
以某种方式解决了?
...
我怎么能:
我有这段代码:
<cars:2016Model
Engine.Power = "MOREMOREWARPSPEED"
>
public class 2016Model : Control
{
public 2016Model()
{
if (Date == 2016)
Engine = new 2016 Engine
}
public Engine { get; set; }
public class Engine
{
public virtual Double Power
get
{
return 0;
}
}
public class 2016Engine : Engine
{
public override Power
{
return 1000KWH;
}
}
public class 2015Engine : Engine
{
public override Power
{
return 350HP;
}
}
我想换掉中级班。
我想换掉模板,并对模型和引擎的当前版本拥有不同的视图。
我想对此进行模板化,但我无法看到如何从Xaml设置可交换类的属性。
答案 0 :(得分:1)
我不完全确定我明白你想做什么,但我怀疑。
首先,您的代码由于各种原因而无法编译 - 除此之外,您无法使用数字启动标识符。但这是一个狡辩 - 假设这些模型对象:
public class Car2016Model : Control
{
public Engine Engine { get; set; }
}
public class Engine
{
public virtual double Power => 0;
}
public class Engine2016 : Engine
{
public override double Power => 1000;
}
public class Engine2015 : Engine
{
public override double Power => 350;
}
然后,您可以使用不同的引擎在XAML中声明汽车,如下所示:
<cars:Car2016Model>
<cars:Car2016Model.Engine>
<cars:Engine2015 />
</cars:Car2016Model.Engine>
</cars:Car2016Model>
<cars:Car2016Model>
<cars:Car2016Model.Engine>
<cars:Engine2016 />
</cars:Car2016Model.Engine>
</cars:Car2016Model>
当然,如果您还希望显示有用的内容,则需要为Cars2016Model
控件提供控件模板:
<Grid.Resources>
<ResourceDictionary>
<ControlTemplate TargetType="cars:Car2016Model" x:Key="Template">
<Grid Background="Cyan">
<TextBox Text="{Binding Engine.Power, Mode=OneTime}" />
</Grid>
</ControlTemplate>
</ResourceDictionary>
</Grid.Resources>
从控件中引用模板:
<cars:Car2016Model Template="{StaticResource Template}">
<cars:Car2016Model.Engine>
<cars:Engine2015 />
</cars:Car2016Model.Engine>
</cars:Car2016Model>
我希望这就是你所要求的。