Я сделал пользовательскую кнопку, так как я хотел бы иметь возможность устанавливать разные строки независимо от содержания. Затем я сделал ControlTemplate
в своем xaml, чтобы указать, как следует отображать два содержимого. Содержимое привязано к под-свойствам выбранного элемента (из списка). Я использую INotifyPropertyChanged
, чтобы уведомить представление, если выбор изменился. А затем содержимое и под-содержимое моей кнопки, должно измениться соответственно.
Теперь это прекрасно работает для содержимого. Но субконтент только отображает что-либо, когда программа впервые загружена. После первого изменения в выделении оно становится пустым и остается пустым.
Я что-то пропустил? Что-нибудь еще, что мне нужно добавить?
Пользовательская кнопка C#
public class DoubleContentButton : Button
{
static DoubleContentButton() { }
public object SubContent
{
get => GetValue(SubContentProperty);
set => SetValue(SubContentProperty, value);
}
public static readonly DependencyProperty SubContentProperty =
DependencyProperty.Register(name: "SubContent", typeof(object), typeof(DoubleContentButton), new UIPropertyMetadata());
}
Пользовательский шаблон управления кнопками
<Style x:Key="StatusButton" TargetType="{x:Type custom:DoubleContentButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type custom:DoubleContentButton}">
<StackPanel Margin="0 0 0 20">
<!-- This updates -->
<TextBlock Text="{TemplateBinding Content}"/>
<!-- This does not update -->
<TextBlock Text="{TemplateBinding SubContent}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Реализация кнопки
<custom:DoubleContentButton
Command="{Binding MyCommand}"
Content="{Binding SelectedItem.Status}"
SubContent="{Binding SelectedItem.SubStatus}"
Style="{StaticResource StatusButton}" />