2014-01-26 4 views
0

Я пытаюсь показать класс со списком классов в WPat datagrid.Вложенные коллекции добавить проблемы

У меня есть следующий код XAML:

<Window x:Class="Main.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     FlowDirection="RightToLeft"> 
    <Grid> 
     <DataGrid Height="auto" Width="auto" Name="DaveningTimes" CanUserAddRows="False" AutoGenerateColumns="False"> 
      <DataGrid.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Padding="3"/> 
          </StackPanel> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type GroupItem}"> 
             <Expander> 
              <Expander.Header> 
               <StackPanel Orientation="Horizontal"> 
                <TextBlock Text="{Binding Path=ItemCount}" Margin="8,0,4,0"/> 
                <TextBlock Text="{Binding Path=Name}" /> 
               </StackPanel> 
              </Expander.Header> 
              <ItemsPresenter /> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </DataGrid.GroupStyle> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <DataGrid ItemsSource="{Binding Alerts}" AutoGenerateColumns="False"> 
         <DataGrid.Columns> 
          <DataGridTextColumn Binding="{Binding AlertTime.time, ValidatesOnExceptions=True, Mode=TwoWay}" Header="זמן" Width="auto"/> 
          <DataGridTemplateColumn Header="קובץ התראה" MinWidth="300"> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 
             <Grid> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="auto" /> 
              </Grid.ColumnDefinitions> 
              <TextBox Text="{Binding AlertProgram, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsEnabled="False" Grid.Column="0" x:Name="PathToFile"/> 
              <Button Content="..." Grid.Column="1" Click="Button_browse_alert_program" /> 
             </Grid> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 
          </DataGridTemplateColumn> 
         </DataGrid.Columns> 
        </DataGrid> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding DaveningTime}" Header="זמן תפילה" IsReadOnly="True"/> 
       <DataGridTextColumn Binding="{Binding DaveningName}" Header="סוג תפילה" IsReadOnly="True"/> 
       <DataGridCheckBoxColumn Binding="{Binding ToAlert}" Header="להתריע?" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

Код позади:

IList<Davening> prayes; 
public ICollectionView prayes_view { get; private set; } 


public MainWindow() 
{ 
    prayes = getPrayers(getHTMLfromURL()).ToList(); 
    InitializeComponent(); 


    prayes_view = new ListCollectionView(prayes.ToList()); 
    prayes_view.GroupDescriptions.Add(new PropertyGroupDescription("DaveningName")); 
    prayes_view.CollectionChanged += prayes_view_CollectionChanged; 
    DaveningTimes.ItemsSource = prayes_view; 
} 

Где getPrayers(getHTMLfromURL()) получает из Интернета данные я отображающее.

Классы я использую описаны в следующей диаграмме: enter image description here

Проблема:

Добавление столбцов пользователем в сетке данных, которая находится в строке детали добавляет элементы, но все значения: null. Кроме того, валидация не работает (нет красного маркера или что-то в этом роде)

ответ

0

В качестве хорошей практики вы можете попробовать использовать подэлементы с XAML, чтобы отображать только эту конкретную информацию. Затем вы должны объединить их в более крупный объект. Это лучше подходит для глубоких структур, а сложность/вложенность XAML поддерживается на расстоянии. Он также имеет другие преимущества:

  • визуализировать только вложенную деталь в изолированном режиме;
  • визуализировать тот же кусок в других гнездах;
  • абстрактно вложенный тип от типа nestee;
  • проще реализовать с AJAX некоторые сложные парадигмы GUI (например, «обзор, масштабирование, детали по требованию»).

Возможно, это может помочь: How to place an XAML usercontrol in a grid. После того, как вы разрешили проблему, ее также намного легче отладить.

+0

Спасибо за совет, но это не отвечает на вопрос. Если вы можете добавить комментарий к нескольким статьям на эту тему ... – elyashiv

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