1

これが単純なものであり、明らかなものを見逃していることを願っています。私は MVVM を使用しており、Datagridこれにバインドされている がCollectionViewSourceありObservableCollection、次にが取り込まれていObservableCollectionます。最初は取り込まれておらず、UI のチェック ボックスを介して追加されています。

私が抱えている問題は、ObservableCollectionが追加されたときに、 のグループ化にヘッダーが表示されますDataGridが、個々の行自体は表示されないことです。

どんな助けでも本当に感謝します、

これが Datagrid の XAML です

<DataGrid DataContext="{Binding GroupedBookings}"
          ItemsSource="{Binding SourceCollection}"
          AutoGenerateColumns="False"
          SelectionMode="Single"
          SelectionUnit="FullRow"
          CanUserSortColumns="True"
          SelectedItem="{Binding SelectedBooking}"
          CanUserAddRows="False">
  <DataGrid.GroupStyle>
    <GroupStyle>
      <GroupStyle.HeaderTemplate>
        <DataTemplate>
          <StackPanel>
            <TextBlock Text="{Binding Path=MemberCount.SupporterType}"
                        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=Name}" />
                      <TextBlock Text="{Binding Path=ItemCount}"
                                  Margin="8 0 4 0" />
                    </StackPanel>
                  </Expander.Header>
                </Expander>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </GroupStyle.ContainerStyle>
    </GroupStyle>
  </DataGrid.GroupStyle>
  <DataGrid.Columns>
    <DataGridTextColumn Header="Cost"
                        Binding="{Binding Cost}" />
    <DataGridTextColumn Header="Order No"
                        Binding="{Binding LinkedOrderID}" />
  </DataGrid.Columns>
</DataGrid>

そして、コレクションの私のコード

_bookings = new ObservableCollection<Booking>(rep.Bookings_Get().Where(x => x.JobID == CurrentJob.JobID));
GroupedBookings = CollectionViewSource.GetDefaultView(Bookings);
GroupedBookings.GroupDescriptions.Add(new PropertyGroupDescription("MemberCount.SupporterType"));

監視可能なコレクションがCollectionViewVMと同じように正常に更新されていることを確認するItemCountには、UI でヘッダーが増加しても、行を表示できないようです。

前もって感謝します

編集:

EthicalLogics の提案Bookingsとは対照的に、直接割り当てるようにコードを変更しましたが、これは役に立たず、以下のように定義されています。_bookingsBookings

public ObservableCollection<Booking> Bookings
{
    get { return _bookings; }
    set
    {
        _bookings = value;
        OnPropertyChanged("Bookings");
    }

}

ここはGroupedBookings

public ICollectionView GroupedBookings
{
    get { return _groupedBookings; }
    set
    {
        _groupedBookings = value;
        OnPropertyChanged("GroupedBookings");
    }
}
4

2 に答える 2

2

以下を XAML に追加しましたが、何か小さなものを見逃していたことがわかりましたが、CollectionViewSource を使用してデータ グリッドでグループ化する複数の例を見たところ、GroupStyle の一部としてこれを含む Microsoft のみが見つかりました。

<Expander.Content>
    <ItemsPresenter />
</Expander.Content>

これが同様の問題を抱えている人に役立つことを願っています

于 2013-01-22T11:38:23.403 に答える
0
public ObservableCollection<Booking> _bookings{get;set;}

バインディング ソースは、フィールドではなくプロパティである必要があります。バインディング システムはリフレクションを使用し、フィールドではなくプロパティのみを検索するため、これが役立つことを願っています。

于 2013-01-16T15:05:24.417 に答える