如何正确按日期对 ObservableCollection 进行排序?
How to correctly sort by date an ObservableCollection?
如何按开始日期和结束日期对集合进行排序?
在我的 DashboardView 中,我有 2 个 ListBox 和 2 个 DatePickers。这两个列表都绑定到我的 ViewModel。
我从 Mysql 数据库获取的 ObservableCollection 中的日期。我想要实现的是在 View 中按来自 Pickers 的日期进行排序和反映排序,一个用于 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();
}
}
查看
<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();
}
视图模型
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; }
}
模型二。
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;
}
我认为更改了错误的代码。
并在View中做了过滤的实现。
为了方便使用了Window,但并没有改变本质。
基础连接
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)
{
}
}
}
如何按开始日期和结束日期对集合进行排序? 在我的 DashboardView 中,我有 2 个 ListBox 和 2 个 DatePickers。这两个列表都绑定到我的 ViewModel。 我从 Mysql 数据库获取的 ObservableCollection 中的日期。我想要实现的是在 View 中按来自 Pickers 的日期进行排序和反映排序,一个用于 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();
}
}
查看
<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();
}
视图模型
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; }
}
模型二。
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;
}
我认为更改了错误的代码。 并在View中做了过滤的实现。 为了方便使用了Window,但并没有改变本质。
基础连接
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)
{
}
}
}