2013-11-13 2 views
0

Я как бы застрял в достижении того, что должно быть элементом управления свойстваGrid, но в моем случае для данного свойства у меня есть значение before и value after. например если свойство - это имя, что оно имеет два значения: name before и name after.Достижение свойстваgrid выглядит программно с дополнительной колонкой в ​​wpf

class Person 
    { 

     #region class constructor 
     /// <summary> 
     /// class constructor 
     /// </summary> 
     /// <param name="_person"></param> 
     public Person(string before,string after) 
     { 
      this.nameBefore = before; // assign beforename to namebefore 
      this.nameAfter = after; // assign aftername to nameAfter 
     } 

     #endregion class constructor 

     #region properties 

     /// <summary> 
     /// Name property 
     /// </summary> 
     private string nameBefore; 

     /// <summary> 
     /// public Property 
     /// for nameBefore 
     /// </summary> 
     public string NameBefore 
     { 
      get { return nameBefore; } 
      set { nameBefore = value; } 
     } 


     /// <summary> 
     /// name property after 
     /// </summary> 
     private string nameAfter; 


     /// <summary> 
     /// public property for nameAfter 
     /// </summary> 
     public string NameAfter 
     { 
      get { return nameAfter; } 
      set { nameAfter = value; } 
     } 

     #endregion properties 

    } 

Мне нужно выставить все свойства этого класса, которые могут иметь значение до и после. эти значения устанавливаются снаружи. Мне нужно заполнить эти значения так же, как propertygrid. но в моем случае у меня есть еще один дополнительный столбец (значение после).

вот как мой XAML выглядит следующим образом:

<Grid> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="20" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <TextBlock Background="Gray" Padding="5,2,5,5" Grid.Column="0" Grid.Row="0" Text="Property" /> 
     <TextBlock Background="Gray" Padding="5,2,5,5" Grid.Column="1" Grid.Row="0" Text="Before" /> 
     <TextBlock Background="Gray" Padding="5,2,5,5" Grid.Column="2" Grid.Row="0" Text="After" /> 

     <TextBlock Grid.Column="0" Grid.Row="1" Text="Name" /> 
     <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Before }" /> 
     <TextBlock Grid.Column="2" Grid.Row="1" Text="{Binding After }" /> 

    </Grid> 

мне нужно что-то вроде этого

свойство окна

Property Window

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

ответ

1

Вы будете тратить много времени, если будете дублировать каждую собственность. Вместо этого просто продублируйте класс, содержащий свойства. Таким образом, вы могли бы сделать что-то вроде этого:

Определение класса для каждой строки из Grid (для отображения целей):

public class PropertyGridRow : INotifyPropertyChanged 
{ 
    public string PropertyName { get; set; } 
    public object PropertyValueBefore { get; set; } 
    public object PropertyValueAfter { get; set; } 
} 

Тогда вы могли бы заполнить его, как это, или немного по-другому в цикл:

Person before = GetBeforePerson(); 
Person after = GetAfterPerson(); 
... 
PropertyGridRow propertyGridRow = new PropertyGridRow(); 
propertyGridRow.PropertyName = "Some Property"; 
propertyGridRow.PropertyValueBefore = before.SomeProperty; 
propertyGridRow.PropertyValueAfter = after.SomeProperty; 
PropertyGridRows.Add(propertyGridRow); 

Затем покажите это следующим образом:

<GridView ItemsSource="{Binding PropertyGridRows}" ... /> 
+0

Спасибо. Это отличный намек. –

Смежные вопросы