Как изменить заголовок столбца в Infragistics XamDataGrid

Это кажется немного тривиальным, но у меня есть XamDataGrid в моем приложении WPF, и я хотел бы сам установить заголовок своих столбцов, но не могу.

Привязка к BindingList<DictionaryEntry> (не к .Net, но по-прежнему имеет только свойства Key и Value.

Столбцы называются Key и Value (и обновляются, если я изменяю имена свойств в классе DictionaryEntry), в то время как я хотел бы установить их в XAML: (раздел FieldsLayout)

<igDP:XamDataGrid Grid.Row="1"
                  Grid.Column="0"
                  Name="ResultStructure"
                  DataSource="{Binding Path=VariablesDictionary, Mode=TwoWay, ValidatesOnExceptions=True}"
                  Theme="Aero"
                  GroupByAreaLocation="None"
                  IsEnabled="{Binding CanEditStructure}"
                  CellUpdating="ResultStructure_OnCellUpdating"
                  CellUpdated="ResultStructure_OnCellUpdated">
  <igDP:XamDataGrid.FieldLayoutSettings>
    <igDP:FieldLayoutSettings AllowClipboardOperations="All"
                              AllowFieldMoving="WithinLogicalRow"
                              AllowAddNew="True"
                              AddNewRecordLocation="OnBottom"
                              AllowDelete="True" />
  </igDP:XamDataGrid.FieldLayoutSettings>
  <igDP:XamDataGrid.FieldLayouts>
    <igDP:FieldLayout>
      <igDP:FieldLayout.Fields>
        <igDP:Field Name="Column" Tag="Column" Width="Auto" />
        <igDP:Field Tag="Variable" Name="Variable" Width="Auto" />
      </igDP:FieldLayout.Fields>
    </igDP:FieldLayout>
  </igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>

Спасибо.


person Noich    schedule 19.11.2012    source источник
comment
Разве в поле нет свойства Label для установки пользовательского текста для заголовка столбца?   -  person Peter Hansen    schedule 19.11.2012
comment
Есть, но он не переопределяет имена свойств связанного класса.   -  person Noich    schedule 19.11.2012


Ответы (1)


для этой проблемы есть свойство Label

<igDP:Field Name="propertyName" Label="Your custom column name" />

ИЗМЕНИТЬ 2

вот полный пример, который работает для меня (примечание: теперь вам нужно AutoGenerateFields="False") с моделью представления.

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:igDP="http://infragistics.com/DataPresenter"
        Title="Window1"
        Height="400"
        Width="600">
  <Grid>
    <igDP:XamDataGrid DataSource="{Binding SampleDataList}"
                      Theme="Aero"
                      GroupByAreaLocation="None">
      <igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:FieldLayoutSettings AllowClipboardOperations="All"
                                  AllowFieldMoving="WithinLogicalRow"
                                  AllowAddNew="True"
                                  AddNewRecordLocation="OnBottom"
                                  AutoGenerateFields="False"
                                  AllowDelete="True" />
      </igDP:XamDataGrid.FieldLayoutSettings>
      <igDP:XamDataGrid.FieldLayouts>
        <igDP:FieldLayout>
          <igDP:FieldLayout.Fields>
            <igDP:Field Name="Sample1"
                        Label="Custom Label Spalte 1"
                        Width="Auto" />
            <igDP:Field Name="Sample2"
                        Label="Custom Label Spalte 2"
                        Width="Auto" />
          </igDP:FieldLayout.Fields>
        </igDP:FieldLayout>
      </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>
  </Grid>
</Window>

код позади и модель представления с использованием BindingList

public partial class Window1 : Window
{
  public Window1() {
    this.DataContext = new SampleDataViewModel();
    this.InitializeComponent();
  }
}

public class SampleDataViewModel : DependencyObject
{
  public class SampleData : INotifyPropertyChanged
  {
    private string sample1;
    private string sample2;

    public string Sample1 {
      get { return this.sample1; }
      set {
        if (Equals(value, this.sample1)) {
          return;
        }
        this.sample1 = value;
        this.OnPropertyChanged("Sample1");
      }
    }

    public string Sample2 {
      get { return this.sample2; }
      set {
        if (Equals(value, this.sample2)) {
          return;
        }
        this.sample2 = value;
        this.OnPropertyChanged("Sample2");
      }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName) {
      var handler = this.PropertyChanged;
      if (handler != null) {
        handler(this, new PropertyChangedEventArgs(propertyName));
      }
    }
  }

  public static readonly DependencyProperty SampleDataListProperty =
    DependencyProperty.Register("SampleDataList", typeof(BindingList<SampleData>), typeof(Window1), new PropertyMetadata(default(BindingList<SampleData>)));

  public BindingList<SampleData> SampleDataList {
    get { return (BindingList<SampleData>)this.GetValue(SampleDataListProperty); }
    set { this.SetValue(SampleDataListProperty, value); }
  }

  public SampleDataViewModel() {
    this.SampleDataList = new BindingList<SampleData>();
    for (int i = 0; i < 10; i++) {
      var data = new SampleData();
      data.Sample1 = "Test sample Text " + i % 100;
      data.Sample2 = "Another Test " + i % 200;
      this.SampleDataList.Add(data);
    }
  }
}

надеюсь, это поможет

person punker76    schedule 19.11.2012
comment
Неа. Кажется, он не может переопределить имена свойств. Я не знаю, связано ли это с моей конкретной привязкой или нет, браузер функций Infragistics не очень помог. - person Noich; 19.11.2012
comment
@Noich, я думаю, вы забыли это: ‹igDP:FieldLayoutSettings AutoGenerateFields=False /› - person punker76; 20.11.2012
comment
Я использую BindingList (ObservableCollection не позволяет мне добавлять строки) и с помощью вашего XAML я получаю пробел там, где должен быть XamDataGrid. - person Noich; 20.11.2012
comment
Кроме того, я хотел бы иметь данные в модели представления, а не в коде, это возможно с вашим предложением? - person Noich; 20.11.2012
comment
@Noich, я изменил пример и теперь использую viemodel и список привязок, и все работает нормально. - person punker76; 20.11.2012
comment
Есть ли причина использовать свойство зависимости? Могу ли я использовать BindingList<DictionaryEntry> без него? - person Noich; 20.11.2012
comment
@Noich да, это тоже работает: public BindingList‹SampleData› SampleDataList { get; набор; } - person punker76; 20.11.2012
comment
Большое спасибо! В конце концов, чего мне не хватало, так это того, что поле Name (в Xaml) должно соответствовать имени свойства (в виртуальной машине). Затем я могу отредактировать метку по своему усмотрению при установке AutoGenerateFields='False'. - person Noich; 20.11.2012