2013-03-28 3 views
1

Мне нужно предоставить пользователям возможность изменять уровень ведения журнала правил NLog.Выбор элементов управления WPF

Существует 12 правил, и каждый из них имеет собственный уровень ведения журнала.

Какие элементы управления вы могли бы рекомендовать для использования в WPF?

+0

Это зависит от того, как вы хотите, чтобы это выглядело так? Что такое Возможно, простой DataGrid? –

+0

Может быть, combobox? Но все зависит от того, как вы этого хотите. – Tan

+0

Ну, такое решение зависит от разных факторов. Насколько сложна запись, которую вы хотите показать? Кто является пользователем интерфейса (технический фон)? Как выглядит ваш пользовательский интерфейс? Есть ли какие-то парадигмы, которым вы должны следовать? И, конечно, какая функциональность должна быть обеспечена?- Кстати, я думаю, что лучше переместить этот пост на [ux.stackexchange.com] (http://ux.stackexchange.com) – DHN

ответ

1

Я не знаком с NLog, но я думаю, если вы должны выбрать между небольшим количеством заранее определенных параметров, то ComboBox - лучший элемент пользовательского интерфейса для этого.

Вы сказали, что у вас есть 12 Вход уровней, поэтому в этом случае имеет наибольший смысл использовать ItemsControl на самом деле показать эти элементы вместо создания всех элементов пользовательского интерфейса самостоятельно:

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

Код Behind:

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 
    } 

Результат:

enter image description here

Things отметить:

  • Я вижу, у вас есть несколько вопросов без ответа WPF и вы выглядите довольно расстроенным об этом. Не будь. Это прекрасная и отличная среда для работы. Я создал этот пример в надежде, что вы сможете увидеть его истинную красоту. Нет никакого шанса, что вы можете достичь такого же примера в winforms без LOT больше кода и усилий.
  • Посмотрите, насколько простым и красивым этот код на самом деле. Я широко использую возможности привязки данных WPF, и это делает все намного проще.
  • Обратите внимание, что не существует ни одной строки кода, которая ссылается или управляет каким-либо элементом пользовательского интерфейса. Все, что я сделал, это создать правильные структуры данных, а затем создать соответствующий пользовательский интерфейс, чтобы отображать/манипулировать им.
  • «Клей» между данными и пользовательским интерфейсом - это свойство DataContext, что и устраняет все привязки XAML.
  • Если вы пришли из winforms или других традиционных фонов, вам действительно нужно забыть все, что вы знаете, и обнять MVVM (Нажмите на ссылку, это не википедия).
  • Опять же, я не знаком с NLog, поэтому я не уверен, соответствует ли структура данных, которую я создал, что вам нужно. В любом случае, дайте мне знать.
  • Сообщите мне, если вам нужна дополнительная помощь. Я буду рад помочь вам в ваших первых шагах в WPF.
Смежные вопросы