Как правильно отсортировать ObservableCollection по дате? - PullRequest
0 голосов
/ 04 августа 2020

Как отсортировать коллекцию по StartDate и EndDate? В моем DashboardView у меня есть 2 ListBox и 2 DatePickers. Оба списка связаны с моей ViewModel. Дата в ObservableCollection я получаю из базы данных Mysql. Я хочу добиться сортировки и отражения сортировки в представлении по датам из средств выбора, одно для StartDate, другое для EndDate. Следует ли использовать временные списки и привязывать к ним уже отсортированные значения? Ниже мой вид ViewModel. Оба типа ObservableCollection имеют свойство DateTime.

 public class DashboardViewModel
    { 
        public ObservableCollection<AvizModel> lstAvizuri { get; set; } = new ObservableCollection<AvizModel>();
        public ObservableCollection<NIRModel> lstNIRuri { get; set; } = new ObservableCollection<NIRModel>();
        public DateTime StartDate { get; set; } = DateTime.Now;
        public DateTime EndDate { get; set; } = DateTime.Now;
        public DashboardViewModel()
        {
            lstAvizuri = BaseConnection.GetAvizList();
            lstNIRuri = BaseConnection.GetNirList();
        }
     
    }

View

   <Page.Resources>
        <Style x:Key="txtStyle" TargetType="TextBlock">
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
        </Style>       
        <Style x:Key="txtStyle1" TargetType="TextBlock">
            <Setter Property="FontSize" Value="12"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Top"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="Margin" Value="1"/>
        </Style>
    </Page.Resources>

    <Grid Margin="10,10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Row="0" Grid.Column="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="2*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="De la data de: " HorizontalAlignment="Center" VerticalAlignment="Center" Padding="15" FontSize="16"/>
            <DatePicker Grid.Column="1" x:Name="dpStartDate" VerticalContentAlignment="Center" VerticalAlignment="Center" FontSize="20"  SelectedDate="{Binding StartDate, Mode=TwoWay}"/>
        </Grid>

        <Grid Grid.Row="0" Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="2*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="De la data de: " HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16"/>
            <DatePicker x:Name="dpEndDate" Grid.Row="0" Grid.Column="1" FontSize="20" HorizontalContentAlignment="Stretch" VerticalAlignment="Center" VerticalContentAlignment="Center" SelectedDate="{Binding EndDate, Mode=TwoWay}"/>
        </Grid>

        <StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"> 
            <TextBlock Text="Lista cu NIR-uri create." HorizontalAlignment="Center" Margin="0,5" FontSize="18" FontWeight="Bold"/>  
            <Grid Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/> 
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>   
                <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource txtStyle}" Margin="5" Text="Serie Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource txtStyle}" Margin="5" Text="Numar Factura"/>  
                <TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource txtStyle}" Margin="5" Text="Furnizor"/>    
                <TextBlock Grid.Row="0" Grid.Column="3" Style="{StaticResource txtStyle}" Margin="5" Text="Numar NIR"/>
                <TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource txtStyle}" Margin="5" Text="TVA Factura"/>                 
                <TextBlock Grid.Row="0" Grid.Column="5" Style="{StaticResource txtStyle}" Margin="5" Text="TVA NIR"/>   
                <TextBlock Grid.Row="0" Grid.Column="6" Style="{StaticResource txtStyle}" Margin="5" Text="Total Factura"/> 
                <TextBlock Grid.Row="0" Grid.Column="7" Style="{StaticResource txtStyle}" Margin="5" Text="Data Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="8" Style="{StaticResource txtStyle}" Margin="5" Text="Data NIR"/>
                
                <ListBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="10"  x:Name="lstNir" ItemsSource="{Binding lstNIRuri, UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Stretch">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>   
                                <TextBlock Grid.Column="0" Style="{StaticResource txtStyle}" Text="{Binding SerieFactura}"/>  
                                <TextBlock Grid.Column="1" Style="{StaticResource txtStyle}" Text="{Binding NrFactura}"/>  
                                 <TextBlock Grid.Column="2" Style="{StaticResource txtStyle}" Text="{Binding FurnizorId}"/>
                                <TextBlock Grid.Column="3" Style="{StaticResource txtStyle}" Text="{Binding NrNIR}"/>
                                 <TextBlock Grid.Column="4" Style="{StaticResource txtStyle}" Text="{Binding TVAFactura}"/>
                                 <TextBlock Grid.Column="5" Style="{StaticResource txtStyle}" Text="{Binding TVANIR}"/>
                                <TextBlock Grid.Column="6" Style="{StaticResource txtStyle}" Text="{Binding TotalFactura}"/>
                                <TextBlock Grid.Column="7" Style="{StaticResource txtStyle}" Text="{Binding DataFactura, StringFormat='{}{0:dd/M/yyyy}'}"/>
                                <TextBlock Grid.Column="8" Style="{StaticResource txtStyle}" Text="{Binding DataNIR, StringFormat='{}{0:dd/M/yyyy}'}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </StackPanel>

        <StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
            <TextBlock Text="Lista cu Avize create :" HorizontalAlignment="Center" Margin="0,5" FontSize="18" FontWeight="Bold"/>
            <Grid Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.5*"/>
                    <ColumnDefinition Width="0.5*"/>
                    <ColumnDefinition Width="1.5*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>               
                <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource txtStyle1}" Text="Serie"/>
                <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource txtStyle1}" Text="Numar"/>
                <TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource txtStyle1}" Text="Client"/>
                <TextBlock Grid.Row="0" Grid.Column="3" Style="{StaticResource txtStyle1}" Text="Produs"/>
                <TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource txtStyle1}" Text="Cantitate"/>
                <TextBlock Grid.Row="0" Grid.Column="5" Style="{StaticResource txtStyle1}" Text="Nume delegat"/>
                <TextBlock Grid.Row="0" Grid.Column="6" Style="{StaticResource txtStyle1}" Text="Nr. Auto"/>
                <TextBlock Grid.Row="0" Grid.Column="7" Style="{StaticResource txtStyle1}" Text="Ora Incarcare"/>
                <TextBlock Grid.Row="0" Grid.Column="8" Style="{StaticResource txtStyle1}" Text="Reprezentant Furnizor"/>
                <TextBlock Grid.Row="0" Grid.Column="9" Style="{StaticResource txtStyle1}" Text="Reprezentant Beneficiar"/>
                <TextBlock Grid.Row="0" Grid.Column="10" Style="{StaticResource txtStyle1}" Text="Data"/>

                <ListBox x:Name="lstAvizeCreate" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="22" ItemsSource="{Binding lstAvizuri}" HorizontalContentAlignment="Stretch" ScrollViewer.CanContentScroll="True">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="1.5*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Grid.Column="0" Style="{StaticResource txtStyle}" Text="{Binding DateFirma.SerieAviz}"/>
                                <TextBlock Grid.Column="1" Style="{StaticResource txtStyle}" Text="{Binding DateFirma.NrAviz}"/>
                                <TextBlock Grid.Column="2" Style="{StaticResource txtStyle}" TextWrapping="Wrap" Text="{Binding DateFurnizor.Nume}"/>
                                <TextBlock Grid.Column="3" Style="{StaticResource txtStyle}" Text="{Binding DenumireProdus}"/>
                                <TextBlock Grid.Column="4" Style="{StaticResource txtStyle}" Text="{Binding CantitateLivrata}"/> 
                                <TextBlock Grid.Column="5" Style="{StaticResource txtStyle}" Text="{Binding NumeDelegat}"/>
                                <TextBlock Grid.Column="6" Style="{StaticResource txtStyle}" Text="{Binding NrAuto}"/>
                                <TextBlock Grid.Column="7" Style="{StaticResource txtStyle}" Text="{Binding OraIncarcare}"/>
                                <TextBlock Grid.Column="8" Style="{StaticResource txtStyle}" Text="{Binding RepFurnizor}"/>
                                <TextBlock Grid.Column="9" Style="{StaticResource txtStyle}" Text="{Binding RepBeneficiar}"/>
                                <TextBlock Grid.Column="10" Style="{StaticResource txtStyle}" Text="{Binding TimeStamp, StringFormat='{}{0:dd/M/yyyy}'}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </StackPanel>

        <Button x:Name="btnBack" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Content="Inchide" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="60,10" Margin="5" Click="btnBack_Click"/>
View.cs
        public DashboardView()
        {
            InitializeComponent();
            DataContext = new DashboardViewModel();
        }

ViewModel

 public class DashboardViewModel
    { 
        public ObservableCollection<AvizModel> lstAvizuri { get; set; } = new ObservableCollection<AvizModel>();
        public ObservableCollection<NIRModel> lstNIRuri { get; set; } = new ObservableCollection<NIRModel>();
        public DateTime StartDate { get; set; } = DateTime.Now;
        public DateTime EndDate { get; set; } = DateTime.Now;
        public DashboardViewModel()
        {
            lstAvizuri = BaseConnection.GetAvizList();
            lstNIRuri = BaseConnection.GetNirList();
        }        
    }

Первая модель.

    public class AvizModel
    {
        public int Id { get; set; }
        public DateFirmaModel DateFirma { get; set; }
        public FurnizorModel DateFurnizor { get; set; }
        public int ProdusId { get; set; } 

         ///Date for Filtering
        public DateTime TimeStamp { get; set; }
    }

Модель 2.

  public class NIRModel : INotifyPropertyChanged
    {
        private int furnizorId;
        private UInt64 nrNIR;
        private string serieFactura;
        private string numeFurnizor;
        private UInt64 nrFactura;
        private double totalFactura;
        private double tVAFactura;
        private double totalNIR;
        private double tVANIR;
        private double discount;
        private bool discountType;
        private bool active;
        private bool editing;
        private string observatii;
        private DateTime data;
        private DateTime dataNIR;

        [Browsable(false)]
        public int Id { get; set; }

        [DisplayName("Nr NIR")]
        public UInt64 NrNIR
        {
            get => nrNIR;
            set
            {
                if (Equals(value, nrNIR))
                {
                    return;
                }
                nrNIR = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Data NIR")]

////Date for filtering
        public DateTime DataNIR
        {
            get => dataNIR;
            set
            {
                if (Equals(value, dataNIR))
                {
                    return;
                }
                dataNIR = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Total NIR")]
        public double TotalNIR
        {
            get => totalNIR;
            set
            {
                if (Equals(value, totalNIR))
                {
                    return;
                }
                totalNIR = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("TVA NIR")]
        public double TVANIR
        {
            get => tVANIR;
            set
            {
                if (Equals(value, tVANIR))
                {
                    return;
                }
                tVANIR = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Furnizor")]
        public string NumeFurnizor
        {
            get => numeFurnizor;
            set
            {
                if (Equals(value, numeFurnizor))
                {
                    return;
                }
                numeFurnizor = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Data Factura")]
        public DateTime DataFactura
        {
            get => data;
            set
            {
                if (Equals(value, data))
                {
                    return;
                }
                data = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Serie Factura")]
        public string SerieFactura
        {
            get => serieFactura;
            set
            {
                if (Equals(value, serieFactura))
                {
                    return;
                }
                serieFactura = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Nr Factura")]
        public UInt64 NrFactura
        {
            get => nrFactura;
            set
            {
                if (Equals(value, nrFactura))
                {
                    return;
                }
                nrFactura = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("Total Factura")]
        public double TotalFactura
        {
            get => totalFactura;
            set
            {
                if (Equals(value, totalFactura))
                {
                    return;
                }
                totalFactura = value;
                OnPropertyChanged();
            }
        }

        [DisplayName("TVA Factura")]
        public double TVAFactura
        {
            get => tVAFactura;
            set
            {
                if (Equals(value, tVAFactura))
                {
                    return;
                }
                tVAFactura = value;
                OnPropertyChanged();
            }
        }

        [Browsable(false)]
        public int FurnizorId
        {
            get => furnizorId;
            set
            {
                if (Equals(value, furnizorId))
                {
                    return;
                }
                furnizorId = value;
                OnPropertyChanged();
            }
        }

        [Browsable(false)]
        public double Discount
        {
            get => discount;
            set
            {
                if (Equals(value, discount))
                {
                    return;
                }
                discount = value;
                OnPropertyChanged();
            }
        }

        [Browsable(false)]
        public bool DiscountType
        {
            get => discountType;
            set
            {
                if (Equals(value, discountType))
                {
                    return;
                }
                discountType = value;
                OnPropertyChanged();
            }
        }

        [Browsable(false)]
        public bool Editing
        {
            get => editing;
            set
            {
                if (Equals(value, editing))
                {
                    return;
                }
                editing = value;
                OnPropertyChanged();
            }
        }

        [Browsable(false)]
        public bool Active
        {
            get => active;
            set
            {
                if (Equals(value, active))
                {
                    return;
                }
                active = value;
                OnPropertyChanged();
            }
        }
        public string Observatii
        {
            get => observatii;
            set
            {
                if (Equals(value, observatii))
                {
                    return;
                }
                observatii = value;
                OnPropertyChanged();
            }
        }
        public List<ProdNIRModel> Produse { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Вот как я получаю данные из базы данных:

   public static ObservableCollection<NIRModel> GetNirList()
        {
            var result = new ObservableCollection<NIRModel>();
            try
            {
                connection = new MySqlConnection(); connection.ConnectionString = GetConnectionString(); connection.Open();
                var query = $"SELECT * FROM NIRuri";
                using (var command = new MySqlCommand(query, connection))
                {
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var nirModel = new NIRModel();
                            nirModel.Id = Convert.ToInt32(reader["Id"]);
                            nirModel.FurnizorId = Convert.ToInt32(reader["FurnizorId"]);
                            nirModel.DataFactura = Convert.ToDateTime(reader["DataFactura"]);
                            nirModel.DataNIR = Convert.ToDateTime(reader["DataNIR"]);
                            nirModel.SerieFactura = reader["SerieFactura"].ToString();
                            nirModel.NrFactura = Convert.ToUInt32(reader["NrFactura"]);
                            nirModel.TotalFactura = Convert.ToDouble(reader["TotalFactura"]);
                            nirModel.NrNIR = Convert.ToUInt32(reader["NrNIR"]);
                            nirModel.TVAFactura = Convert.ToDouble(reader["TVAFactura"]);
                            nirModel.TotalNIR = Convert.ToDouble(reader["TotalNIR"]);
                            nirModel.TVANIR = Convert.ToDouble(reader["TVANIR"]);
                            nirModel.Observatii = reader["Observatii"].ToString();
                            nirModel.Editing = Convert.ToBoolean(reader["Editing"]);
                            nirModel.Active = Convert.ToBoolean(reader["Active"]);
                            result.Add(nirModel);
                        }
                    }
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return result;
        }

1 Ответ

0 голосов
/ 04 августа 2020

Внес правки не в тот код, на мой взгляд. И сделал реализацию фильтрации во View. Использовал Window для удобства, но сути это не меняет.

BaseConnection

using System;
using System.Collections.Generic;

namespace DataFilteredCollection
{
    public class BaseConnection
    {
        public static IEnumerable<AvizModel> GetAvizList()
        {
            var result = new List<AvizModel>()
            // Example Data
            {
                new AvizModel() {Id=111, TimeStamp = new DateTime(2010, 10, 25)},
                new AvizModel() {Id=222, TimeStamp = new DateTime(2014, 10, 25)},
                new AvizModel() {Id=333, TimeStamp = new DateTime(2017, 10, 25)},
                new AvizModel() {Id=444, TimeStamp = new DateTime(2019, 10, 25)}
            };

            /// Some code

            return result;
        }

        public static IEnumerable<NIRModel> GetNirList()
        {
            var result = new List<NIRModel>()
            // Example Data
            {
                new NIRModel() {Id=123, DataNIR=new DateTime(2010, 10, 25) },
                new NIRModel() {Id=456, DataNIR=new DateTime(2014, 10, 25) },
                new NIRModel() {Id=789, DataNIR=new DateTime(2017, 10, 25) },
                new NIRModel() {Id=402, DataNIR=new DateTime(2019, 10, 25) }
            };


            /// Some code

            return result;
        }
    }
}

DashboardViewModel

using System.Collections.ObjectModel;

namespace DataFilteredCollection
{
    public class DashboardViewModel
    {
        public ObservableCollection<AvizModel> LstAvizuri { get; }
            = new ObservableCollection<AvizModel>();
        public ObservableCollection<NIRModel> LstNIRuri { get; }
            = new ObservableCollection<NIRModel>();
        //public DateTime StartDate { get; set; } = DateTime.Now;
        //public DateTime EndDate { get; set; } = DateTime.Now;

        public DashboardViewModel()
        {
            foreach (var item in BaseConnection.GetAvizList())
                LstAvizuri.Add(item);

            foreach (var item in BaseConnection.GetNirList())
                LstNIRuri.Add(item);
        }
    }
}

XAML

<Window x:Class="DataFilteredCollection.ViewWind"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DataFilteredCollection" xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="ViewWind" Height="450" Width="800">

    <Window.Resources>
        <x:Static x:Key="DateTime.Now" Member="sys:DateTime.Now"/>
        <local:DashboardViewModel x:Key="ViewModel"/>
        <CollectionViewSource x:Key="Avizuries"
                              Source="{Binding LstAvizuri}"
                              IsLiveFilteringRequested="True"
                              Filter="FilterAvizuries">
            <CollectionViewSource.LiveFilteringProperties>
                <sys:String>TimeStamp</sys:String>
            </CollectionViewSource.LiveFilteringProperties>
        </CollectionViewSource>
        <CollectionViewSource x:Key="NIRuries"
                              Source="{Binding LstNIRuri}"
                              IsLiveFilteringRequested="True"
                              Filter="FilterNIRuries">
            <CollectionViewSource.LiveFilteringProperties>
                <sys:String>DataNir</sys:String>
            </CollectionViewSource.LiveFilteringProperties>
        </CollectionViewSource>
        <Style x:Key="txtStyle" TargetType="TextBlock">
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
        </Style>
        <Style x:Key="txtStyle1" TargetType="TextBlock">
            <Setter Property="FontSize" Value="12"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Top"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="Margin" Value="1"/>
        </Style>
    </Window.Resources>
    <Window.DataContext>
        <Binding Mode="OneWay" Source="{StaticResource ViewModel}"/>
    </Window.DataContext>

    <Grid Margin="10,10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Row="0" Grid.Column="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="2*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="De la data de: " HorizontalAlignment="Center" VerticalAlignment="Center" Padding="15" FontSize="16"/>
            <DatePicker Grid.Column="1" x:Name="dpStartDate" VerticalContentAlignment="Center" VerticalAlignment="Center"
                        FontSize="20"  DisplayDateEnd="{Binding SelectedDate, ElementName=dpEndDate}"
                        SelectedDateChanged="SelectedDateChanged"
                        SelectedDate="{Binding Mode=OneWay, Source={StaticResource DateTime.Now}}"/>
        </Grid>

        <Grid Grid.Row="0" Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="2*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="De la data de: " HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16"/>
            <DatePicker x:Name="dpEndDate" Grid.Row="0" Grid.Column="1" FontSize="20"
                        HorizontalContentAlignment="Stretch" VerticalAlignment="Center" VerticalContentAlignment="Center"
                        DisplayDateStart="{Binding SelectedDate, ElementName=dpStartDate}"
                        SelectedDateChanged="SelectedDateChanged"
                        SelectedDate="{Binding Mode=OneWay, Source={StaticResource DateTime.Now}}"/>
        </Grid>

        <StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2">
            <TextBlock Text="Lista cu NIR-uri create." HorizontalAlignment="Center" Margin="0,5" FontSize="18" FontWeight="Bold"/>
            <Grid Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource txtStyle}" Margin="5" Text="Serie Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource txtStyle}" Margin="5" Text="Numar Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource txtStyle}" Margin="5" Text="Furnizor"/>
                <TextBlock Grid.Row="0" Grid.Column="3" Style="{StaticResource txtStyle}" Margin="5" Text="Numar NIR"/>
                <TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource txtStyle}" Margin="5" Text="TVA Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="5" Style="{StaticResource txtStyle}" Margin="5" Text="TVA NIR"/>
                <TextBlock Grid.Row="0" Grid.Column="6" Style="{StaticResource txtStyle}" Margin="5" Text="Total Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="7" Style="{StaticResource txtStyle}" Margin="5" Text="Data Factura"/>
                <TextBlock Grid.Row="0" Grid.Column="8" Style="{StaticResource txtStyle}" Margin="5" Text="Data NIR"/>

                <ListBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="10"  x:Name="lstNir"
                         ItemsSource="{Binding Mode=OneWay, Source={StaticResource NIRuries}}"
                         HorizontalContentAlignment="Stretch">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Grid.Column="0" Style="{StaticResource txtStyle}" Text="{Binding SerieFactura}"/>
                                <TextBlock Grid.Column="1" Style="{StaticResource txtStyle}" Text="{Binding NrFactura}"/>
                                <TextBlock Grid.Column="2" Style="{StaticResource txtStyle}" Text="{Binding FurnizorId}"/>
                                <TextBlock Grid.Column="3" Style="{StaticResource txtStyle}" Text="{Binding NrNIR}"/>
                                <TextBlock Grid.Column="4" Style="{StaticResource txtStyle}" Text="{Binding TVAFactura}"/>
                                <TextBlock Grid.Column="5" Style="{StaticResource txtStyle}" Text="{Binding TVANIR}"/>
                                <TextBlock Grid.Column="6" Style="{StaticResource txtStyle}" Text="{Binding TotalFactura}"/>
                                <TextBlock Grid.Column="7" Style="{StaticResource txtStyle}" Text="{Binding DataFactura, StringFormat='{}{0:dd/M/yyyy}'}"/>
                                <TextBlock Grid.Column="8" Style="{StaticResource txtStyle}" Text="{Binding DataNIR, StringFormat='{}{0:dd/M/yyyy}'}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </StackPanel>

        <StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
            <TextBlock Text="Lista cu Avize create :" HorizontalAlignment="Center" Margin="0,5" FontSize="18" FontWeight="Bold"/>
            <Grid Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.5*"/>
                    <ColumnDefinition Width="0.5*"/>
                    <ColumnDefinition Width="1.5*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource txtStyle1}" Text="Serie"/>
                <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource txtStyle1}" Text="Numar"/>
                <TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource txtStyle1}" Text="Client"/>
                <TextBlock Grid.Row="0" Grid.Column="3" Style="{StaticResource txtStyle1}" Text="Produs"/>
                <TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource txtStyle1}" Text="Cantitate"/>
                <TextBlock Grid.Row="0" Grid.Column="5" Style="{StaticResource txtStyle1}" Text="Nume delegat"/>
                <TextBlock Grid.Row="0" Grid.Column="6" Style="{StaticResource txtStyle1}" Text="Nr. Auto"/>
                <TextBlock Grid.Row="0" Grid.Column="7" Style="{StaticResource txtStyle1}" Text="Ora Incarcare"/>
                <TextBlock Grid.Row="0" Grid.Column="8" Style="{StaticResource txtStyle1}" Text="Reprezentant Furnizor"/>
                <TextBlock Grid.Row="0" Grid.Column="9" Style="{StaticResource txtStyle1}" Text="Reprezentant Beneficiar"/>
                <TextBlock Grid.Row="0" Grid.Column="10" Style="{StaticResource txtStyle1}" Text="Data"/>

                <ListBox x:Name="lstAvizeCreate" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="22"
                         ItemsSource="{Binding Mode=OneWay, Source={StaticResource Avizuries}}" HorizontalContentAlignment="Stretch" 
                         ScrollViewer.CanContentScroll="True">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="1.5*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Grid.Column="0" Style="{StaticResource txtStyle}" Text="{Binding DateFirma.SerieAviz}"/>
                                <TextBlock Grid.Column="1" Style="{StaticResource txtStyle}" Text="{Binding DateFirma.NrAviz}"/>
                                <TextBlock Grid.Column="2" Style="{StaticResource txtStyle}" TextWrapping="Wrap" Text="{Binding DateFurnizor.Nume}"/>
                                <TextBlock Grid.Column="3" Style="{StaticResource txtStyle}" Text="{Binding DenumireProdus}"/>
                                <TextBlock Grid.Column="4" Style="{StaticResource txtStyle}" Text="{Binding CantitateLivrata}"/>
                                <TextBlock Grid.Column="5" Style="{StaticResource txtStyle}" Text="{Binding NumeDelegat}"/>
                                <TextBlock Grid.Column="6" Style="{StaticResource txtStyle}" Text="{Binding NrAuto}"/>
                                <TextBlock Grid.Column="7" Style="{StaticResource txtStyle}" Text="{Binding OraIncarcare}"/>
                                <TextBlock Grid.Column="8" Style="{StaticResource txtStyle}" Text="{Binding RepFurnizor}"/>
                                <TextBlock Grid.Column="9" Style="{StaticResource txtStyle}" Text="{Binding RepBeneficiar}"/>
                                <TextBlock Grid.Column="10" Style="{StaticResource txtStyle}" Text="{Binding TimeStamp, StringFormat='{}{0:dd/M/yyyy}'}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </StackPanel>

        <Button x:Name="btnBack" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Content="Inchide"
                HorizontalAlignment="Center" VerticalAlignment="Center" Padding="60,10" Margin="5" Click="btnBack_Click"/>
    </Grid>
</Window>

Код позади

using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace DataFilteredCollection
{
    /// <summary>
    /// Логика взаимодействия для ViewWind.xaml
    /// </summary>
    public partial class ViewWind : Window
    {
        public ViewWind()
        {
            InitializeComponent();
        }

        private void FilterAvizuries(object sender, FilterEventArgs e)
        {
            AvizModel aviz = (AvizModel) e.Item;

            e.Accepted = dpEndDate.SelectedDate == dpStartDate.SelectedDate
                || (aviz.TimeStamp >= dpStartDate.SelectedDate && aviz.TimeStamp <= dpEndDate.SelectedDate);
        }

        private void FilterNIRuries(object sender, FilterEventArgs e)
        {
            NIRModel aviz = (NIRModel)e.Item;

            e.Accepted = dpEndDate.SelectedDate == dpStartDate.SelectedDate
                || (aviz.DataNIR >= dpStartDate.SelectedDate && aviz.DataNIR <= dpEndDate.SelectedDate);
        }
        private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            ((CollectionViewSource)Resources["Avizuries"]).View?.Refresh();
            ((CollectionViewSource)Resources["NIRuries"]).View?.Refresh();
        }

        private void btnBack_Click(object sender, RoutedEventArgs e)
        {

        }

    }
}
...