#c# #wpf #button #mvvm
#c# #wpf #кнопка #mvvm
Вопрос:
У меня есть приложение 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
событие` но его не существует.
Кто-нибудь может мне помочь?
Ответ №1:
Дополнение к предложению Алекса.
Создайте два свойства в вашей модели представления, одно для текста и одно для значения внутри скобок.
вот сообщение и подсчет, например.
Свяжите два свойства` как показано ниже, чтобы упростить его.
<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>
Ответ №2:
В WPF вы можете вкладывать TextBlock
их и применять к ним разные стили и привязки.
Итак, в вашей 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>