我正在尝试在WPF数据网格中显示一个包含类列表的类。
我有以下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())
从互联网上获取我正在显示的数据。
我正在使用的类如下图所示:
问题:
用户在行详细信息中的数据网格中添加列会添加项目,但所有值都为null
。此外,验证似乎不起作用(没有红色标记或类似的东西)
答案 0 :(得分:0)
作为一种好的做法,您可以尝试使用带有XAML的子元素来仅呈现特定的信息。然后,您应该将它们组合到更大的对象中。这对于深层结构更好地扩展,并且XAML的复杂性/嵌套保持不变。它还有其他好处:
也许这有点帮助:How to place an XAML usercontrol in a grid。 一旦你减少了问题,它也应该更容易调试。