1

ビューにLoggingServiceマップされた があります。一度変更されたテキストを表示しています。

これまでのところ問題なく動作しますが、に基づいてテキストの色を変更したいと考えていますLoggingType

UpdateTextStyle私の問題は、以下のメソッドを呼び出すために LoggingService プロパティ変更イベントをサブスクライブする場所が見つからないことです。

    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;
        }
    }

前もって感謝します!

4

1 に答える 1

1

WPF で何をしているのかを理解していない限り、on プロパティ変更イベントを使用しないでください。メモリ リークが発生します。

XAMLで(私が推測する)あなたにLoggingServiceバインドされていると思います。TextBox

したがって、IValueConverterforLoggingTypesを作成してから、コンバーターを介して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;
        }
    }
}
于 2013-10-25T04:15:15.983 に答える