控制添加键/值对?

时间:2011-01-11 21:10:29

标签: wpf wpf-controls

我需要一个控件来允许用户添加/删除/编辑键/值对的行。什么是最好的控制用于此?有人有例子吗?我对WPF很新。

2 个答案:

答案 0 :(得分:5)

我使用带有两个带标签的文本框的简单对话,新对将添加到应绑定到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 :(得分:1)

假设您正在使用MVVM,请在视图模型上使用对类型的ObservableCollection(或者如果您不想定义自己的类型,则可以使用System.Collections.Generic.KeyValuePair类型)。

您可以为用户提供两个文本框来添加新对,它会实例化您的对类型并将其添加到ObservableCollection中。您可以使用命令在视图模型上调用方法来执行此操作(或查看诸如Caliburn.Micro之类的框架,该框架支持基于约定的视图控件绑定,例如视图模型上的动词按钮)。

您可以使用ListBox来显示对的集合(只需将ListBox上的ItemsSource属性绑定到视图模型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>