Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF;根据组合框项更改日志级别_Wpf_Observablecollection - Fatal编程技术网

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;
        }
    }
并将其命名为my
ListViewItem
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>