订阅属性更改事件以更新文本块的样式
本文关键字:文本 更新 样式 事件 属性 | 更新日期: 2023-09-27 18:36:46
我有一个映射到视图的LoggingService
。它显示一些修改后的文本。
到目前为止它工作正常,但是想根据LoggingType
修改我的文本颜色。
我的问题是我找不到应该在哪里订阅 LoggingService 属性更改事件以调用以下UpdateTextStyle
方法:
private void UpdateTextStyle(ILoggingService logging, string propertyName)
{
var loggingType = logging.GetUserLevelLatestLog().Key;
switch (loggingType)
{
case LoggingTypes.Error:
View.UserInfoLogsTextBlock.Foreground = new SolidColorBrush(Colors.Red);
View.UserInfoLogsTextBlock.FontWeight = FontWeights.Bold;
break;
...
}
}
下面是映射到 VM 中的视图的属性:
public ILoggingService LoggingService
{
get
{
if (_loggingService == null)
{
_loggingService = Model.LoggingService;
}
return _loggingService;
}
}
提前感谢!
不要对属性更改事件使用,除非您知道在 WPF 中执行的操作。您将导致内存泄漏。
我假设你的LoggingService
绑定到你(我假设)XAML 中的TextBox
。
因此,我建议您创建一个IValueConverter
供LoggingTypes
Style
然后通过转换器将TextBox.Style
绑定到LoggingService.LoggingType
。
<UserControl>
<UserControl.Resources>
<LoggingStyleConverter x:Key="LoggingStyleConverter" />
</UserControl.Resources>
<TextBox
Text="{Binding Path=Foo.Bar.LoggingService.Text}"
Style="{Binding Path=Foo.Bar.LoggingService.Type
Converter={StaticResource LoggingStyleConverter}}"
/>
</UserControl>
public class LoggingStyleConverter : IValueConverter
{
public object Convert(object value, blah blah blah)
{
var type = (LoggingTypes)value;
switch (type)
{
case blah:
return SomeStyle;
default:
return SomeOtherStyle;
}
}
}