WPF;根据组合框项更改日志级别
所以我有了这个WPF;根据组合框项更改日志级别,wpf,observablecollection,Wpf,Observablecollection,所以我有了这个日志集合: public static ObservableCollection<Log> Logs{ get; } = new ObservableCollection<Log>(); public class Log : INotifyPropertyChanged { public Log(Level level, string msg) { Timestamp = DateTime.N
日志
集合:
public static ObservableCollection<Log> Logs{ get; } = new ObservableCollection<Log>();
public class Log : INotifyPropertyChanged
{
public Log(Level level, string msg)
{
Timestamp = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
Level = level;
Message = msg;
}
public event PropertyChangedEventHandler PropertyChanged;
private Level level;
public Level Level
{
get { return level; }
set
{
level = value;
NotifyPropertyChanged("Level");
}
}
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public enum Level
{
DEBUG,
ERROR,
FAIL,
INFO,
WARN
}
组合框命令
public void Execute(object parameter)
{
ComboBox comboBox = parameter as ComboBox;
if (comboBox != null)
{
var comboBoxItem = comboBox.SelectedItem as ComboBoxItem;
if (comboBoxItem != null)
{
Level level = (Level)Enum.Parse(typeof(Level), comboBoxItem.Content.ToString(), true);
LogService.Level = level;
}
}
}
因此,当用户更改此级别
时,我希望我的列表视图
仅显示相关的级别
。
我还创建了转换器
:
public class LogLevelVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (LogService.Level == (Level)value)
return true;
return false;
}
}
并将其命名为myListViewItem
style
:
<DataTrigger Binding="{Binding Level, Converter={StaticResource LogLevelVisibilityConverter}}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
因此,当用户将此ComboBOxItem
更改为例如DEBUG
时,我只能在DEBUG
模式下看到所有新消息,但所有旧消息仍然可见,我只想看到所选级别的消息
<DataTrigger Binding="{Binding Level, Converter={StaticResource LogLevelVisibilityConverter}}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>