Контроль для добавления пары ключ / значение? - PullRequest
1 голос
/ 12 января 2011

Мне нужен элемент управления, чтобы пользователи могли добавлять / удалять / редактировать строки пар ключ / значение.Какой лучший контроль использовать для этого?У кого-нибудь есть пример?Я довольно новичок в WPF.

Ответы [ 2 ]

5 голосов
/ 12 января 2011

Я бы использовал простой диалог с двумя помеченными текстовыми полями, новая пара будет добавлена ​​к исходным данным, которые должны быть связаны с DataGrid, чтобы строки генерировались автоматически.

Редактировать: пример решения DataGrid.
XAML:

<Window
    ...
    DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
    <StackPanel Orientation="Vertical">
        <DataGrid ItemsSource="{Binding GridData}"/>
    </StackPanel>
</Window>

Код:
В окне класс:

    private ObservableCollection<Pair> gridData = new ObservableCollection<Pair>(new Pair[]{new Pair()});
    public ObservableCollection<Pair> GridData
    {
        get { return gridData; }
    }

Класс пары:

public class Pair : INotifyPropertyChanged
{
    private string key = "Key";
    public string Key
    {
        get { return key; }
        set
        {
            if (this.key != value)
            {
                key = value;
                NotifyPropertyChanged("Key");
            }
        }
    }


    private double value = 0;
    public double Value
    {
        get { return value; }
        set
        {
            if (this.value != value)
            {
                this.value = value;
                NotifyPropertyChanged("Value");
            }
        }
    }

    public Pair() { }
    public Pair(string key, double value)
        : this()
    {
        Key = key;
        Value = value;
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion
}

Вы должны иметь возможность добавлять новые пары с обычной функциональностью DataGrid.

1 голос
/ 12 января 2011

Предполагая, что вы используете MVVM, используйте ObservableCollection вашего типа пары (или вы можете использовать тип System.Collections.Generic.KeyValuePair, если вы не хотите определять свой собственный) в модели представления.

Вы можете предоставить пользователю два текстовых поля для добавления новой пары, которая создает экземпляр типа вашей пары и добавляет его в ObservableCollection.Вы можете использовать команды для вызова метода в вашей модели представления, чтобы сделать это (или заглянуть в структуру, такую ​​как Caliburn.Micro, которая поддерживает связывание основанных на соглашении элементов управления представлением, таких как кнопки с глаголами в вашей модели представления).* Вы можете использовать ListBox для отображения коллекции пар (просто свяжите свойство ItemsSource в ListBox с моделями представлений ObservableCollection пар).В качестве альтернативы, если вы хотите поддерживать встроенное редактирование существующих пар, тогда DataGrid будет хорошим выбором.DataGrid поддерживает встроенное редактирование, дважды щелкнув значение ячейки.Вы можете определить нормальный шаблон ячейки и шаблон редактирования ячейки в DataGrid XAML:

<DataGrid ItemsSource="{Binding MyPairsCollection}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Key">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate> 
          <TextBlock Text="{Binding Key}" />
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
      <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
          <TextBox Text="{Binding Key}" />
        </DataTemplate>
      </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
    ...
  </DataGrid.Columns>
</DataGrid>
...