Содержимое кнопки на изменение

У меня есть приложение WPF-MVVM, и я привязываю содержимое своих кнопок с помощью ViewModel. Иногда бывает, что новый контент содержит текст внутри «()».

   <Button Grid.Row="0" Content="{Binding UnfinishedText}"
                            FontSize="22" Grid.Column="7"
                            Height="Auto" Foreground="White"
                            Style="{StaticResource MaterialDesignToolButton}"
                            Command="{Binding ShowUnfinishedProcedures}"
                            CommandParameter="{Binding ElementName=MainWindow}"/>


 public string ToDoText
        {
            get { return _toDoText; }
            set
            {
                _toDoText = value;
                RaisePropertyChanged("ToDoText");
            }
        }

Предположим, я связал новый контент: «Привет (60)». Можно ли изменить передний план в этом примере только для текста в скобках?

Я планировал использовать Button.ContentChangedсобытие, но его не существует.

Может кто-нибудь мне помочь?

c#,wpf,button,mvvm,

1

Ответов: 2


3 принят

Добавление к предложению Алекса.

Создайте два свойства в вашей модели просмотра, один для текста и один для значения внутри скобок.

здесь Сообщение и счет, например.

Привяжите два свойства, как показано ниже, чтобы это было просто.

 <Button.Content>
    <TextBlock>
        <Run Text="{Binding Message}"/>(            
        <Run Text="{Binding Count}" Style="{StaticResource SomeStyle}"/>)            
    </TextBlock>
 </Button.Content>

Также при необходимости вы можете добавить какой-то статический текст.

    <TextBlock>
        <Run Text="StatiContent" Foreground="Blue"/>
        <Run Text="{Binding Message}"/>(            
        <Run Text="{Binding Count}" Style="{StaticResource SomeStyle}"/>)            
    </TextBlock>

3

В WPF вы можете вложить TextBlocks и применить к ним разные стили и привязки.

Таким образом, в вашем ViewModel вы можете иметь два отдельных свойства, каждый из которых связан с другим TextBlockстилем:

private string _message = null;
public string Message
{
    get
    {
        return _message;
    }
    set
    {
        if (_message == value)
        {
            return;
        }

        _message = value;
        RaisePropertyChanged(() => Message);
    }
}

private int _count = 0;
public int Count
{
    get
    {
        return _count;
    }
    set
    {
        _count = value;
        RaisePropertyChanged(() => Count);
    }
}

XAML:

<Button Grid.Row="0"
        FontSize="22" Grid.Column="7"
        Height="Auto" Foreground="White"
        Style="{StaticResource MaterialDesignToolButton}"
        Command="{Binding ShowUnfinishedProcedures}"
        CommandParameter="{Binding ElementName=MainWindow}">
    <Button.Content>
        <TextBlock><TextBlock Text="{Binding Message}" /> (<TextBlock Text="{Binding Count}" Style="{StaticResource CountTextBlockStyle}" />)</TextBlock>
    </Button.Content>
</Button>
C #, WPF, кнопка, MVVM,