Обычно я создаю все объекты в представлении и связываю его свойства с моделью / моделью представления. Но что, если у элемента управления есть свойство другого типа, а не string / bool?
Например, простая диаграмма, которая может иметь легенду типа "Chart.Legend"
Представление:
<ChartControl x:Name="{Binding ChartModelObject.Name}" Data="{Binding ChartModelObject.Data}">
<ChartControl.Legend Postiton="{Binding ChartModelObject.Legend.Position}">
<ChartControlLegend/>
</ChartControl.Legend">
</ChartControl>
с ViewModel
public class ChartViewModel
{
public ChartModel ChartModelObject{ get; set; }
}
и моделью
public class ChartModel
{
public LegendModel Legend { get; set; }
public String Name { get; set; }
public IData Data { get; set; }
}
public class LegendModel
{
public PositionEnum Position { get; set; }
}
В зависимости от того, есть ли у моего свойства ChartModels "Legend" экземпляр типа LegendModel и нет Я хотел бы показать легенду, иначе нет. Теперь мне нужно создать объект типа "ChartControl.Legend" в представлении, иначе можно было бы связать ChartControl.Legend напрямую с ChartModel.LegendModel. Но как мне этого добиться?
РЕДАКТИРОВАТЬ:
более общий пример
Просмотр
<Button Content="{Binding Name}" FontSize="14" FontWeight="Bold">
<!-- Only use a LinearGradientBrush if there is a ExampleModelObject Object-->
<Button.Background>
<LinearGradientBrush StartPoint="0,0.5"
EndPoint="1,0.5">
<GradientStop Color="Green" Offset="{Binding ExampleModelObject.FirstPoint}" />
<GradientStop Color="White" Offset="{Binding ExampleModelObject.SecondPoint}" />
</LinearGradientBrush>
</Button.Background>
</Button>
ViewModel
public class ExampleViewModel
{
public ButtonBackgroundExampleModel ExampleModelObject{ get; set; }
public string Name {get;set}
}
Модель
public class ButtonBackgroundExampleModel
{
public double FirstPoint { get; set; }
public double SecondPoint { get; set; }
}
В зависимости от того, имеет ли ViewModel экземпляр ButtonBackgroundExampleModel, я хотел бы создать Button.Background.LinearGradientBru sh. Если нет ButtonBackgroundExampleModel (нет FirstPoint, SecondPoint), то не должно быть Button.Background. Итак, должно быть:
<Button Content="{Binding Name}" FontSize="14" FontWeight="Bold">
</Button>