У меня есть класс контекста данных со сложными полями (объектами). Каждый объект имеет двойное и логическое поле и еще одну интересную информацию. У меня также есть два шаблона данных: один для двойного значения для представления его как слайдера, а другой - для представления поля bool. Как написать xaml для использования двух уже существующих шаблонов данных, которые у меня есть? Проблема заключается в том, что класс контекста данных может иметь поля, которые не являются объектами, содержащими двойное и логическое значение.
Я новичок, но знаю, как работают привязки и контекст данных.
Некоторый код:
Class MyDataContext
{
public MyWpfField field1;
public WeirdField field1;
public MyWpfField field1;
public WeirdField field1;
}
Class MyWpfField
{
public string niceName;
public bool isEnable;
public double data;
.
.
.
}
Некоторые xaml:
<DataTemplate x:Key="DataBoolTmpl">
<StackPanel
Margin="{StaticResource DefaultSpacing}"
Orientation="Horizontal"
ToolTip="{Binding ....}">
<CheckBox
IsEnabled="{Binding ...}"
Visibility="{Binding ...}"
IsChecked="{Binding ...}" />
<TextBlock Text="{Binding niceName}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="DataTmplSlider">
<StackPanel
IsEnabled="{Binding ...}"
Margin="{StaticResource DefaultSpacing}"
ToolTip="{Binding ...}" >
<TextBlock Text="{Binding niceName}" />
<StackPanel Orientation="Horizontal"
Margin="{StaticResource DefaultSpacing}">
<TextBlock Text="{Binding ...}" MinWidth="40"/>
<TextBlock Text="{Binding ...}"/>
<Slider
Margin="5,0,0,0"
Visibility="{Binding ...}"
Minimum="{Binding ...}"
Maximum="{Binding ...}"
IsSnapToTickEnabled="True"
SmallChange="{Binding ...}"
MinWidth="100"
MinHeight="15">
<Slider.Value>
<Binding ...}"/>
</Slider.Value>
</Slider>
</StackPanel>
</StackPanel>
</DataTemplate>
Адаптировано из этого ответа: qaru.site/questions/336942/...
Используйте ContentControl
для использования ваших шаблонов данных:
<ContentControl ContentTemplate="{StaticResource ..}" Content="{Binding MyField}"/>
Вы создадите один для каждого поля. Для получения дополнительной информации см. MSDN.