Дополнительные свойства не обновляются - PullRequest
0 голосов
/ 13 февраля 2020

Я сделал пользовательскую кнопку, так как я хотел бы иметь возможность устанавливать разные строки независимо от содержания. Затем я сделал 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}" />

1 Ответ

0 голосов
/ 13 февраля 2020

Можете ли вы проверить, имеет ли свойство SubStatus значение PropertyChangedEventHandler, возбужденное на установщике «SubStatus», или оно имеет значение, правильно ли оно поднято?

Как это:

public event PropertyChangedEventHandler PropertyChanged;  

private void OnPropertyRaised(string propertyname)
{  
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));  
} 

public string SubStatus
{
    get { ... }
    set
    {  
        _SubStatus = value;  
        OnPropertyRaised(nameof(SubStatus));
    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...