我需要为用户提供更改NLog规则的日志记录级别的选项。
有12条规则,每条规则都有自己的日志记录级别。
您建议使用哪些控件在WPF中提供此选项?
发布于 2013-04-20 13:22:54
我不熟悉NLog,但我想如果你必须在一些预先确定的选项中进行选择,那么ComboBox是最好的UI元素。
您说您有12个日志级别,所以在这种情况下,使用ItemsControl来实际显示这些项而不是自己创建所有UI元素是最有意义的:
<Window x:Class="MiscSamples.LogLevelsSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LogLevels" Height="300" Width="300">
<ItemsControl ItemsSource="{Binding LogRules}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Margin="2" Text="{Binding Name}"/>
<ComboBox ItemsSource="{Binding DataContext.LogLevels, RelativeSource={RelativeSource AncestorType=Window}}"
SelectedItem="{Binding LogLevel}" Width="100" Margin="2"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>代码隐藏:
public partial class LogLevelsSample : Window
{
public LogLevelsSample()
{
InitializeComponent();
DataContext = new LogSettingsViewModel();
}
}ViewModel:
public class LogSettingsViewModel
{
public List<LogLevels> LogLevels { get; set; }
public List<LogRule> LogRules { get; set; }
public LogSettingsViewModel()
{
LogLevels = Enum.GetValues(typeof (LogLevels)).OfType<LogLevels>().ToList();
LogRules = Enumerable.Range(1, 12).Select(x => new LogRule()
{
Name = "Log Rule " + x.ToString(),
LogLevel = MiscSamples.LogLevels.Debug
}).ToList();
}
}数据项:
public class LogRule
{
public string Name { get; set; }
public LogLevels LogLevel { get; set; }
}
public enum LogLevels
{
Trace,
Debug,
Warn,
Info,
Error,
Fatal
}结果:

注意事项:
DataContext属性,它是所有XAML绑定的解析依据。https://stackoverflow.com/questions/15676244
复制相似问题