Ich habe eine CollectionViewSource CollectionOfVideos
an ObservableCollection ListOfVideos
gebunden. Diese CollectionViewSource ist die ItemsSource für das DataGrid dataGrid_Video
. Ich habe eine Gruppierung von lShortName
von label
von ListOfVideos
implementiert. Wenn Elemente zu DataGrid hinzugefügt werden, scheint die Gruppierung zu funktionieren, da sie alle hinzugefügten Elemente nach dem Standard label
gruppiert.DataGrid-Gruppierung wird bei Änderung von CollectionViewSource nicht aktualisiert
Problem ist, Gruppierung wird nicht aktualisiert, wenn label
des Elements geändert wird. Hier ist mein Code:
Window.Resources in MainWindow.xaml
<CollectionViewSource x:Key="CollectionOfVideos" Source="{Binding fosaModel.ListOfVideos, UpdateSourceTrigger=PropertyChanged}" IsLiveGroupingRequested="True" IsLiveSortingRequested="True" >
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="label" Converter="{StaticResource LTSConverter}"/>
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="label.lShortName"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
dataGrid_Video in MainWindow.xaml
<DataGrid x:Name="dataGrid_Video"
AutoGenerateColumns="False"
Margin="0,0,0,0"
Grid.Row="1"
ItemsSource="{Binding Source={StaticResource CollectionOfVideos}}"
GridLinesVisibility="Horizontal"
SelectedItem="{Binding fosaModel.SelectedVideo}"
SelectedIndex="{Binding fosaModel.SelectedVideoIndex}"
SelectionUnit="FullRow"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding fName}" Header="Nazwa" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AudioToSync}" Header="Dźwięk"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
Hier ist meine fosaModel
public class fosaModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ObservableCollection<fosaVideo> ListOfVideos { get; set; } = new ObservableCollection<fosaVideo>();
public ObservableCollection<fosaAudio> ListOfAudios { get; set; } = new ObservableCollection<fosaAudio>();
public ObservableCollection<fosaLabel> ListOfLabels { get; set; } = new ObservableCollection<fosaLabel>();
public fosaVideo SelectedVideo { get; set; }
public int SelectedVideoIndex { get; set; } = -1;
public fosaAudio SelectedAudio { get; set; }
public int SelectedAudioIndex { get; set; } = -1;
public fosaLabel SelectedLabel { get; set; }
public int SelectedLabelIndex { get; set; } = -1;
public string WorkingDir { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
public double videoProgress { get; set; }
public int SliderValue { get; set; }
public bool IsDialogClosed { get; set; } = true;
}
Es gibt nur wenige Dinge, die Sie wissen sollten:
- Ich benutze Fody.PropertyChanged, so dass es Benachrichtigung Problem nicht Property ist. Das Hinzufügen neuer Elemente zur Liste aktualisiert das DataGrid.
- Sortierung funktioniert auch nicht.
- Ändern
label
von bestimmten Artikel inListOfVideos
Arbeit hat, überprüfte ich in Debug - Ich dachte, es ist ein Problem mit Punktnotation von
PropertyName
in GroupingDescriptions war, also habe ich einen Konverter gegeben. Mit oder ohne Konverter - Problem existiert noch. - Es gibt auch sehr ähnliche CollectionViewSource, mit Sortierung implementiert, und es funktioniert beim Hinzufügen neuer Artikel.
- Ich benutze MVVM Light und ich möchte es MVVM Art und Weise halten.
Implementierung 'INotifyPropertyChanged' in einer Klasse von ListOfVideos ganz gut funktionierte, habe ich nicht einmal jene LiveGroupingProperties hinzufügen. Es stellte sich heraus, dass es sich um das PropertyChanged-Problem handelte. Vielen Dank! –