Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C和WPF自动更新列表?_C#_Wpf - Fatal编程技术网

C# 如何使用C和WPF自动更新列表?

C# 如何使用C和WPF自动更新列表?,c#,wpf,C#,Wpf,例如,我怀疑我是否有两个列表,一个包含尚未完成且仍可以更新的文件,另一个包含已完成的文件,因为我可以自动更新,而无需更多代码 完成列表: 正在进行的列表: 这里是更新/打开和插入列表时的代码: public void AdicionarCiclo() { var wnd = new SelecionarComunicacao(); Navigator.OpenWindowAsDialog(wnd); i

例如,我怀疑我是否有两个列表,一个包含尚未完成且仍可以更新的文件,另一个包含已完成的文件,因为我可以自动更新,而无需更多代码

完成列表:

正在进行的列表:

这里是更新/打开和插入列表时的代码:

public void AdicionarCiclo()
        {
            var wnd = new SelecionarComunicacao();
            Navigator.OpenWindowAsDialog(wnd);

            if (!wnd.ViewModel.Confirmado)
            {
                return;
            }

            List<int> listaBytes;

            int crg = -1;

            if (wnd.ViewModel.IsPendrive)
            {
                var pdWindow = new SelecionarArquivoPendrive();
                Navigator.OpenWindowAsDialog(pdWindow);
                var pdVm = (SelecionarArquivoPendriveViewModel)pdWindow.DataContext;
                if (!pdVm.Confirmado) return;
                crg = pdVm.AparelhoSelecionado;
                listaBytes = File.ReadAllBytes(pdVm.ArquivoSelecionado.CaminhoCompleto).Select(b => Convert.ToInt32(b)).ToList();
            }
            else
            {
                LoadingText = "Carregando a secagem...";
                IsLoading = true;
                System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
                listaBytes = CrgCommunication.PuxarSecagemDoAparelho(wnd.ViewModel.AparelhoSelecionado);
                crg = wnd.ViewModel.AparelhoSelecionado;
                IsLoading = false;
            }

            if (listaBytes == null || listaBytes.Count == 0)
            {
                MessageBox.Show(messageBoxText: "Algum erro ocorreu ao puxar a secagem!",
                                caption: "Erro!", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Error);
                return;
            }

            var ciclo = CrgDecifrator.DecifrarSecagem(listaBytes);

            if (ciclo == null)
            {
                MessageBox.Show(messageBoxText: "Algum erro ocorreu ao puxar a secagem!",
                                caption: "Erro!", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Error);
                return;
            }

            ciclo.Crg = crg;

            var ret = CiclosAccess.AtualizarCiclo(ciclo);

            if (ret == 0)
            {
                MessageBox.Show(messageBoxText: "Secagem já está presente!",
                                caption: "", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Information);
            }
            else if (ret == 1)
            {
                MessageBox.Show(messageBoxText: "Secagem atualizada com sucesso!",
                                caption: "", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Information);
            }
            else if (ret == 2)
            {
                var add = new AdicionarCiclo(ciclo);
                Navigator.OpenWindowAsDialog(add);

                if (((AdicionarCicloViewModel)add.DataContext).Confirmado)
                {
                    CiclosAccess.SalvarCiclo(ciclo);
                    MessageBox.Show(messageBoxText: "Secagem adicionada com sucesso!",
                                    caption: "", button: MessageBoxButton.OK,
                                    icon: MessageBoxImage.Information);
                }
                else
                {
                    return;
                }
            }

            //var db = new CrgContext();

            //var existente = db.Ciclos.Include(c => c.DadosTratamento).FirstOrDefault(x =>
            //    x.NumeroSerie == ciclo.NumeroSerie && x.NumeroSecagem == ciclo.NumeroSecagem &&
            //    x.Crg == ciclo.Crg)
            //    ;


            //if (existente != null)
            //{
            //    if (existente.NumeroLeituras == ciclo.NumeroLeituras ||
            //        existente.DadosTratamento.LeiturasTratamento.Count ==
            //        ciclo.DadosTratamento.LeiturasTratamento.Count)
            //    {
            //        MessageBox.Show("Esta secagem já está atualizada.");
            //        return;
            //    }
            //    else
            //    {
            //        ciclo.Id = existente.Id;
            //        db.Ciclos.AddOrUpdate(ciclo);
            //    }
            //}
            //else
            //{
            //    var add = new AdicionarCiclo(ciclo);
            //    Navigator.OpenWindowAsDialog(add);

            //    if (((AdicionarCicloViewModel) add.DataContext).Confirmado)
            //    {
            //        db.Ciclos.Add(ciclo);
            //    }
            //    else
            //    {
            //        return;
            //    }
            //}

            //db.SaveChanges();

            RefreshEmAndamento();
            RefreshFinalizados();
        }

        public void AbrirSecagens()
        {
            var wnd = new HistoricoSecagens();
            Navigator.OpenWindowAsDialog(wnd);
        }

        public void AbrirRelatorio()
        {
            var ciclos = TabControlIndex == 0 ? CiclosEmAndamentoSelecionados : CiclosFinalizadosSelecionados;

            if (ciclos.Count == 1)
            {
                var detalhesCiclo = new DetalhesCiclo(ciclos[0]);
                Navigator.OpenWindowAsDialog(detalhesCiclo);
            }
            else if (ciclos.Count > 1)
            {
                MessageBox.Show(messageBoxText: "Você deve ter apenas 1 ciclo selecionado para abrir o relatório.",
                               caption: "Atenção", button: MessageBoxButton.OK,
                               icon: MessageBoxImage.Exclamation);
            }
            else
            {
                MessageBox.Show(messageBoxText: "Selecione um ciclo para abrir o relatório.",
                                caption: "Atenção", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Exclamation);
            }

        }

        public bool CanAbrirRelatorio()
        {
            var ciclos = TabControlIndex == 0 ? CiclosEmAndamentoSelecionados : CiclosFinalizadosSelecionados;

            return ciclos.Count == 1;
        }

        public void Atualizar()
        {
            var ciclo = CiclosEmAndamentoSelecionados.First();
            //LoadingText = "Aguarde um Instante...";
            //IsLoading = true;

            Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));

            new Aguarde().ShowDialog();

            var secagem = CrgCommunication.PuxarSecagemDoAparelho(ciclo.Crg, new Model.Items.ItemHistoricoSecagem
            {
                Crg = ciclo.Crg,
                DataInicio = ciclo.DataInicio,
                NumeroSecagem = ciclo.NumeroSecagem
            });



            if (secagem == null || secagem.Count == 0)
            {
                IsLoading = false;
                MessageBox.Show(messageBoxText: "Erro ao atualizar a secagem!",
                                caption: "Erro!", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Error);
                return;
            }
            new AtualizSecag().ShowDialog();

            var novoCiclo = CrgDecifrator.DecifrarSecagem(secagem);
            novoCiclo.Crg = ciclo.Crg;
            if (novoCiclo == null)
            {
                IsLoading = false;
                MessageBox.Show(messageBoxText: "Erro ao atualizar a secagem!",
                                caption: "Erro!", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Error);
                return;
            }

            var ret = CiclosAccess.AtualizarCiclo(novoCiclo);

            if (ret == 0)
            {
                IsLoading = false;
                MessageBox.Show(messageBoxText: "A secagem já está atualizada!",
                                caption: "", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Information);
                return;
            }
            else if (ret == 1)
            {
                IsLoading = false;
                MessageBox.Show(messageBoxText: "Secagem atualizada com sucesso!",
                                caption: "", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Information);
            }
            else if (ret == 2)
            {
                IsLoading = false;
                MessageBox.Show(messageBoxText:"Secagem não encontrada no aparelho.",
                                caption: "Erro!", button: MessageBoxButton.OK,
                                icon: MessageBoxImage.Error);
                return;
            }

            RefreshEmAndamento();
            RefreshFinalizados();
        }
我在xaml中这样做:

<Window>
    <Window.WindowState>Maximized</Window.WindowState>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <UniformGrid Grid.Row="0" Columns="11" Height="100" HorizontalAlignment="Left" Margin="10 0">
            <UniformGrid.Style>
                <Style TargetType="UniformGrid">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                            <Setter Property="Columns" Value="8"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </UniformGrid.Style>
            <UniformGrid.Resources>
                <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                    <Setter Property="Fill" Value="White"></Setter>
                    <Setter Property="Foreground" Value="White"></Setter>
                    <Setter Property="Background" Value="RoyalBlue"></Setter>
                    <Setter Property="BorderBrush" Value="White"></Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="White"></Setter>
                            <Setter Property="BorderBrush" Value="RoyalBlue"></Setter>
                            <Setter Property="Foreground" Value="RoyalBlue"></Setter>
                            <Setter Property="Fill" Value="RoyalBlue"></Setter>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" Value="#FFC5C5C5"></Setter>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="TextBlock.Foreground" Value="White"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </UniformGrid.Resources>
            <controls:IconButton Command="{Binding AdicionarCicloCommand}" Source="{StaticResource AddFileIcon}">Nova Secagem</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirSecagensCommand}" Source="{StaticResource BooksIcon}">Histórico</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirRelatorioCommand}" Source="{StaticResource FileChartIcon}">Relatório</controls:IconButton>
            <controls:IconButton Command="{Binding AtualizarCommand}" Source="{StaticResource UpdateIcon}" Content="Atualizar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding ExcluirCommand}" Source="{StaticResource DeleteIcon}">Excluir</controls:IconButton>
            <controls:IconButton Command="{Binding GerenciarProdutosCommand}" Source="{StaticResource SettingsIcon}">Gerenciar Dados</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirAlterarCommand}" Source="{StaticResource EditIcon}" Content="Alterar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding FinalizarCommand}" Source="{StaticResource CheckIcon}" Content="Finalizar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding AbrirFiltroCommand}" Source="{StaticResource FilterIcon}" Content="Filtrar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="0">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding ImportarCommand}" Source="{StaticResource FileImportIcon}">Importar</controls:IconButton>
            <controls:IconButton Command="{Binding ExportarCommand}" Source="{StaticResource FileExportIcon}">Exportar</controls:IconButton>
            <controls:IconButton Command="{Binding SairCommand}" Source="{StaticResource ExitIcon}">Sair</controls:IconButton>
        </UniformGrid>
        <TabControl Name="TabControlAbas" Grid.Row="1" SelectedIndex="{Binding TabControlIndex}">
            <TabControl.Resources>
                <Style TargetType="ListViewItem">
                    <Style.Triggers>
                        <Trigger Property="ItemsControl.AlternationIndex"  Value="0">
                            <Setter Property="Background" Value="#FF00FFFF" />
                        </Trigger>
                        <Trigger Property="ItemsControl.AlternationIndex"  Value="1">
                            <Setter Property="Background" Value="#FF8FBC8F" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="Blue"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TabControl.Resources>
            <TabItem Header="Secagens em Andamento">
                <ListView ItemsSource="{Binding CiclosEmAndamento}" SelectionMode="Single" SelectionChanged="CiclosEmAndamento_OnSelectionChanged" util:GridViewSort.AutoSort="True" AlternationCount="2" >
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="" Width="30">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox
                                                   IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="CRG" DisplayMemberBinding="{Binding Crg}" util:GridViewSort.PropertyName="Crg"></GridViewColumn>
                            <GridViewColumn Header="Nº Série" Width="100" DisplayMemberBinding="{Binding NumeroSerie}" util:GridViewSort.PropertyName="NumeroSerie"></GridViewColumn>
                            <GridViewColumn Header="NSec" Width="35" DisplayMemberBinding="{Binding NumeroSecagem}" util:GridViewSort.PropertyName="NumeroSecagem"></GridViewColumn>
                            <GridViewColumn Header="NL" Width="35" DisplayMemberBinding="{Binding NumeroLeituras}" util:GridViewSort.PropertyName="NumeroLeituras"></GridViewColumn>
                            <GridViewColumn Header="NLT" DisplayMemberBinding="{Binding NumeroLeiturasTrat}" util:GridViewSort.PropertyName="NumeroLeiturasTrat"></GridViewColumn>
                            <GridViewColumn Header="Data Coleta" Width="110" DisplayMemberBinding="{Binding DataColeta, StringFormat={}{0:dd/MM/yyyy HH:mm}}" util:GridViewSort.PropertyName="DataColeta"></GridViewColumn>
                            <GridViewColumn Header="Início Ciclo" Width="110" DisplayMemberBinding="{Binding DataInicio, StringFormat={}{0:dd/MM/yyyy HH:mm}}" util:GridViewSort.PropertyName="DataInicio"></GridViewColumn>
                            <GridViewColumn Header="Descrição" DisplayMemberBinding="{Binding Descricao}" util:GridViewSort.PropertyName="Descricao"></GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem>
            <TabItem Header="Secagens Finalizadas">
                <ListView ItemsSource="{Binding FilteredCiclosFinalizados}" SelectionMode="Single" SelectionChanged="CiclosFinalizados_OnSelectionChanged" AlternationCount="2">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="" Width="30">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox
                                            IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="CRG" DisplayMemberBinding="{Binding Crg}" Width="30"></GridViewColumn>
                            <GridViewColumn Header="Nº Série" DisplayMemberBinding="{Binding NumeroSerie}" Width="70"></GridViewColumn>
                            <GridViewColumn Header="NSec" Width="35" DisplayMemberBinding="{Binding NumeroSecagem}"></GridViewColumn>
                            <GridViewColumn Header="NL" Width="35" DisplayMemberBinding="{Binding NumeroLeituras}"></GridViewColumn>
                            <GridViewColumn Header="NLT" Width="35" DisplayMemberBinding="{Binding NumeroLeiturasTrat}"></GridViewColumn>
                            <GridViewColumn Header="Data Coleta" Width="100" DisplayMemberBinding="{Binding DataColeta, StringFormat={}{0:dd/MM/yyyy HH:mm}}"></GridViewColumn>
                            <GridViewColumn Header="Início Ciclo" Width="100" DisplayMemberBinding="{Binding DataInicio, StringFormat={}{0:dd/MM/yyyy HH:mm}}"></GridViewColumn>
                            <GridViewColumn Header="Descrição" Width="300" DisplayMemberBinding="{Binding Descricao}"></GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem>
        </TabControl>
        <TextBlock Grid.Row="1" Foreground="Red" HorizontalAlignment="Right" Text="{Binding AvisoFiltroStr}" FontWeight="Bold" VerticalAlignment="Top" Margin="0 0 10 0"/>
        <Border Grid.Row="0" Grid.RowSpan="2" Background="White" Opacity="0.5" Visibility="{Binding OverlayAberto, Converter={StaticResource BoolToVis}}">

        </Border>
        <GroupBox Header="Filtro das Secagens Finalizadas" Grid.Row="1" Margin="10 0 10 10" HorizontalAlignment="Center" VerticalAlignment="Top" Visibility="{Binding FiltroAberto, Converter={StaticResource BoolToVis}}">
            <StackPanel Background="White">
                <TextBlock Text="Aparelho" FontWeight="Bold" HorizontalAlignment="Center" Margin="0 10 0 0"/>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <CheckBox IsChecked="{Binding Filtro.ApenasAparelho}" Content="Apenas do aparelho:" VerticalAlignment="Center"/>
                    <ComboBox ItemsSource="{Binding AparelhosDisponiveis}" SelectedValue="{Binding Filtro.Aparelho}" Margin="5 0 0 0"/>
                </StackPanel>
                <TextBlock Text="Período" FontWeight="Bold" HorizontalAlignment="Center"/>
                <Grid HorizontalAlignment="Center">
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <RadioButton IsChecked="{Binding Filtro.QualquerData}" Width="120" Grid.Row="0" Grid.Column="0" Content="Qualquer data"/>
                    <RadioButton IsChecked="{Binding Filtro.UltimoMes}" Width="120" Grid.Row="0" Grid.Column="1" Content="Último mês"/>
                    <RadioButton IsChecked="{Binding Filtro.UltimaSemana}" Width="120" Grid.Row="1" Grid.Column="0" Content="Última semana"/>
                    <RadioButton IsChecked="{Binding Filtro.Personalizado}" Width="120" Grid.Row="1" Grid.Column="1" Content="Personalizado"/>
                </Grid>
                <StackPanel Orientation="Vertical" Margin="15 0" Visibility="{Binding Filtro.Personalizado, Converter={StaticResource BoolToVis}}">
                    <TextBlock Text="À partir de:"/>
                    <DatePicker SelectedDate="{Binding Filtro.DataInicio}" />
                    <TextBlock Text="Até:"/>
                    <DatePicker SelectedDate="{Binding Filtro.DataFim}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="10">
                    <Button Command="{Binding AplicarFiltroCommand}" Content="Aplicar" Width="80" Height="25"/>
                    <Button Command="{Binding ResetarFiltroCommand}" Content="Resetar" Width="80" Height="25"/>
                    <Button Command="{Binding FecharFiltroCommand}" Content="Cancelar" Width="80" Height="25"/>
                </StackPanel>
            </StackPanel>
        </GroupBox>
        <GroupBox Header="Alterar Secagem" Grid.Row="1" Margin="10 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Top" Visibility="{Binding AlterarAberto, Converter={StaticResource BoolToVis}}">
            <Grid Background="White">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <TextBlock Margin="0 10 0 5" FontWeight="Bold" Grid.ColumnSpan="2" Text="{Binding SecagemEmEdicao.NumeroSecagem, StringFormat={}Secagem em edição: {0:000}}" HorizontalAlignment="Center"/>
                <TextBlock Grid.Row="1" Grid.Column="0" Margin="10 0 5 0" FontWeight="Bold" Text="Descrição:"/>
                <TextBox Name="TxtAlterarDescricao" Text="{Binding AlterarDescricaoText}" Grid.Row="1" Grid.Column="1" Margin="0 0 10 0" Width="200"/>
                <StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0 5 0 10" HorizontalAlignment="Center">
                    <Button Command="{Binding SalvarAlterarCommand}" Content="Salvar" Width="80" Height="25" Margin="0 0 5 0"/>
                    <Button Command="{Binding CancelarAlterarCommand}" Content="Cancelar" Width="80" Height="25"/>
                </StackPanel>
            </Grid>
        </GroupBox>
        <Grid Grid.Row="0" Grid.RowSpan="2" Visibility="{Binding IsLoading, Converter={StaticResource BoolToVis}, TargetNullValue=Visible, FallbackValue=Visible}">
            <Border Background="LightSlateGray" Opacity="0.2"></Border>
            <Border VerticalAlignment="Center" HorizontalAlignment="Center" Padding="30" Background="RoyalBlue" CornerRadius="5">
                <StackPanel>
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Foreground="White" FontWeight="Bold" Text="{Binding LoadingText}"></TextBlock>
                </StackPanel>
            </Border>
        </Grid>

    </Grid>
</Window>
您可以使用以下代码:

ICollectionView视图=CollectionViewSource.GetDefaultViewItemsSource;
查看。刷新

你能分享一些代码吗?这些代码显示了列表当前是如何工作的,以及它们是如何填写的。我已经编辑了这个问题。你看到ObservableCollection了吗?@Tony事实上我已经在使用它了,所以我怀疑它
<Window>
    <Window.WindowState>Maximized</Window.WindowState>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <UniformGrid Grid.Row="0" Columns="11" Height="100" HorizontalAlignment="Left" Margin="10 0">
            <UniformGrid.Style>
                <Style TargetType="UniformGrid">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                            <Setter Property="Columns" Value="8"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </UniformGrid.Style>
            <UniformGrid.Resources>
                <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                    <Setter Property="Fill" Value="White"></Setter>
                    <Setter Property="Foreground" Value="White"></Setter>
                    <Setter Property="Background" Value="RoyalBlue"></Setter>
                    <Setter Property="BorderBrush" Value="White"></Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="White"></Setter>
                            <Setter Property="BorderBrush" Value="RoyalBlue"></Setter>
                            <Setter Property="Foreground" Value="RoyalBlue"></Setter>
                            <Setter Property="Fill" Value="RoyalBlue"></Setter>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" Value="#FFC5C5C5"></Setter>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="TextBlock.Foreground" Value="White"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </UniformGrid.Resources>
            <controls:IconButton Command="{Binding AdicionarCicloCommand}" Source="{StaticResource AddFileIcon}">Nova Secagem</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirSecagensCommand}" Source="{StaticResource BooksIcon}">Histórico</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirRelatorioCommand}" Source="{StaticResource FileChartIcon}">Relatório</controls:IconButton>
            <controls:IconButton Command="{Binding AtualizarCommand}" Source="{StaticResource UpdateIcon}" Content="Atualizar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding ExcluirCommand}" Source="{StaticResource DeleteIcon}">Excluir</controls:IconButton>
            <controls:IconButton Command="{Binding GerenciarProdutosCommand}" Source="{StaticResource SettingsIcon}">Gerenciar Dados</controls:IconButton>
            <controls:IconButton Command="{Binding AbrirAlterarCommand}" Source="{StaticResource EditIcon}" Content="Alterar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding FinalizarCommand}" Source="{StaticResource CheckIcon}" Content="Finalizar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding AbrirFiltroCommand}" Source="{StaticResource FilterIcon}" Content="Filtrar">
                <controls:IconButton.Style>
                    <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=TabControlAbas, Path=SelectedIndex}" Value="0">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </controls:IconButton.Style>
            </controls:IconButton>
            <controls:IconButton Command="{Binding ImportarCommand}" Source="{StaticResource FileImportIcon}">Importar</controls:IconButton>
            <controls:IconButton Command="{Binding ExportarCommand}" Source="{StaticResource FileExportIcon}">Exportar</controls:IconButton>
            <controls:IconButton Command="{Binding SairCommand}" Source="{StaticResource ExitIcon}">Sair</controls:IconButton>
        </UniformGrid>
        <TabControl Name="TabControlAbas" Grid.Row="1" SelectedIndex="{Binding TabControlIndex}">
            <TabControl.Resources>
                <Style TargetType="ListViewItem">
                    <Style.Triggers>
                        <Trigger Property="ItemsControl.AlternationIndex"  Value="0">
                            <Setter Property="Background" Value="#FF00FFFF" />
                        </Trigger>
                        <Trigger Property="ItemsControl.AlternationIndex"  Value="1">
                            <Setter Property="Background" Value="#FF8FBC8F" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="Blue"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TabControl.Resources>
            <TabItem Header="Secagens em Andamento">
                <ListView ItemsSource="{Binding CiclosEmAndamento}" SelectionMode="Single" SelectionChanged="CiclosEmAndamento_OnSelectionChanged" util:GridViewSort.AutoSort="True" AlternationCount="2" >
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="" Width="30">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox
                                                   IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="CRG" DisplayMemberBinding="{Binding Crg}" util:GridViewSort.PropertyName="Crg"></GridViewColumn>
                            <GridViewColumn Header="Nº Série" Width="100" DisplayMemberBinding="{Binding NumeroSerie}" util:GridViewSort.PropertyName="NumeroSerie"></GridViewColumn>
                            <GridViewColumn Header="NSec" Width="35" DisplayMemberBinding="{Binding NumeroSecagem}" util:GridViewSort.PropertyName="NumeroSecagem"></GridViewColumn>
                            <GridViewColumn Header="NL" Width="35" DisplayMemberBinding="{Binding NumeroLeituras}" util:GridViewSort.PropertyName="NumeroLeituras"></GridViewColumn>
                            <GridViewColumn Header="NLT" DisplayMemberBinding="{Binding NumeroLeiturasTrat}" util:GridViewSort.PropertyName="NumeroLeiturasTrat"></GridViewColumn>
                            <GridViewColumn Header="Data Coleta" Width="110" DisplayMemberBinding="{Binding DataColeta, StringFormat={}{0:dd/MM/yyyy HH:mm}}" util:GridViewSort.PropertyName="DataColeta"></GridViewColumn>
                            <GridViewColumn Header="Início Ciclo" Width="110" DisplayMemberBinding="{Binding DataInicio, StringFormat={}{0:dd/MM/yyyy HH:mm}}" util:GridViewSort.PropertyName="DataInicio"></GridViewColumn>
                            <GridViewColumn Header="Descrição" DisplayMemberBinding="{Binding Descricao}" util:GridViewSort.PropertyName="Descricao"></GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem>
            <TabItem Header="Secagens Finalizadas">
                <ListView ItemsSource="{Binding FilteredCiclosFinalizados}" SelectionMode="Single" SelectionChanged="CiclosFinalizados_OnSelectionChanged" AlternationCount="2">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="" Width="30">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox
                                            IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="CRG" DisplayMemberBinding="{Binding Crg}" Width="30"></GridViewColumn>
                            <GridViewColumn Header="Nº Série" DisplayMemberBinding="{Binding NumeroSerie}" Width="70"></GridViewColumn>
                            <GridViewColumn Header="NSec" Width="35" DisplayMemberBinding="{Binding NumeroSecagem}"></GridViewColumn>
                            <GridViewColumn Header="NL" Width="35" DisplayMemberBinding="{Binding NumeroLeituras}"></GridViewColumn>
                            <GridViewColumn Header="NLT" Width="35" DisplayMemberBinding="{Binding NumeroLeiturasTrat}"></GridViewColumn>
                            <GridViewColumn Header="Data Coleta" Width="100" DisplayMemberBinding="{Binding DataColeta, StringFormat={}{0:dd/MM/yyyy HH:mm}}"></GridViewColumn>
                            <GridViewColumn Header="Início Ciclo" Width="100" DisplayMemberBinding="{Binding DataInicio, StringFormat={}{0:dd/MM/yyyy HH:mm}}"></GridViewColumn>
                            <GridViewColumn Header="Descrição" Width="300" DisplayMemberBinding="{Binding Descricao}"></GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem>
        </TabControl>
        <TextBlock Grid.Row="1" Foreground="Red" HorizontalAlignment="Right" Text="{Binding AvisoFiltroStr}" FontWeight="Bold" VerticalAlignment="Top" Margin="0 0 10 0"/>
        <Border Grid.Row="0" Grid.RowSpan="2" Background="White" Opacity="0.5" Visibility="{Binding OverlayAberto, Converter={StaticResource BoolToVis}}">

        </Border>
        <GroupBox Header="Filtro das Secagens Finalizadas" Grid.Row="1" Margin="10 0 10 10" HorizontalAlignment="Center" VerticalAlignment="Top" Visibility="{Binding FiltroAberto, Converter={StaticResource BoolToVis}}">
            <StackPanel Background="White">
                <TextBlock Text="Aparelho" FontWeight="Bold" HorizontalAlignment="Center" Margin="0 10 0 0"/>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <CheckBox IsChecked="{Binding Filtro.ApenasAparelho}" Content="Apenas do aparelho:" VerticalAlignment="Center"/>
                    <ComboBox ItemsSource="{Binding AparelhosDisponiveis}" SelectedValue="{Binding Filtro.Aparelho}" Margin="5 0 0 0"/>
                </StackPanel>
                <TextBlock Text="Período" FontWeight="Bold" HorizontalAlignment="Center"/>
                <Grid HorizontalAlignment="Center">
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <RadioButton IsChecked="{Binding Filtro.QualquerData}" Width="120" Grid.Row="0" Grid.Column="0" Content="Qualquer data"/>
                    <RadioButton IsChecked="{Binding Filtro.UltimoMes}" Width="120" Grid.Row="0" Grid.Column="1" Content="Último mês"/>
                    <RadioButton IsChecked="{Binding Filtro.UltimaSemana}" Width="120" Grid.Row="1" Grid.Column="0" Content="Última semana"/>
                    <RadioButton IsChecked="{Binding Filtro.Personalizado}" Width="120" Grid.Row="1" Grid.Column="1" Content="Personalizado"/>
                </Grid>
                <StackPanel Orientation="Vertical" Margin="15 0" Visibility="{Binding Filtro.Personalizado, Converter={StaticResource BoolToVis}}">
                    <TextBlock Text="À partir de:"/>
                    <DatePicker SelectedDate="{Binding Filtro.DataInicio}" />
                    <TextBlock Text="Até:"/>
                    <DatePicker SelectedDate="{Binding Filtro.DataFim}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="10">
                    <Button Command="{Binding AplicarFiltroCommand}" Content="Aplicar" Width="80" Height="25"/>
                    <Button Command="{Binding ResetarFiltroCommand}" Content="Resetar" Width="80" Height="25"/>
                    <Button Command="{Binding FecharFiltroCommand}" Content="Cancelar" Width="80" Height="25"/>
                </StackPanel>
            </StackPanel>
        </GroupBox>
        <GroupBox Header="Alterar Secagem" Grid.Row="1" Margin="10 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Top" Visibility="{Binding AlterarAberto, Converter={StaticResource BoolToVis}}">
            <Grid Background="White">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <TextBlock Margin="0 10 0 5" FontWeight="Bold" Grid.ColumnSpan="2" Text="{Binding SecagemEmEdicao.NumeroSecagem, StringFormat={}Secagem em edição: {0:000}}" HorizontalAlignment="Center"/>
                <TextBlock Grid.Row="1" Grid.Column="0" Margin="10 0 5 0" FontWeight="Bold" Text="Descrição:"/>
                <TextBox Name="TxtAlterarDescricao" Text="{Binding AlterarDescricaoText}" Grid.Row="1" Grid.Column="1" Margin="0 0 10 0" Width="200"/>
                <StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0 5 0 10" HorizontalAlignment="Center">
                    <Button Command="{Binding SalvarAlterarCommand}" Content="Salvar" Width="80" Height="25" Margin="0 0 5 0"/>
                    <Button Command="{Binding CancelarAlterarCommand}" Content="Cancelar" Width="80" Height="25"/>
                </StackPanel>
            </Grid>
        </GroupBox>
        <Grid Grid.Row="0" Grid.RowSpan="2" Visibility="{Binding IsLoading, Converter={StaticResource BoolToVis}, TargetNullValue=Visible, FallbackValue=Visible}">
            <Border Background="LightSlateGray" Opacity="0.2"></Border>
            <Border VerticalAlignment="Center" HorizontalAlignment="Center" Padding="30" Background="RoyalBlue" CornerRadius="5">
                <StackPanel>
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Foreground="White" FontWeight="Bold" Text="{Binding LoadingText}"></TextBlock>
                </StackPanel>
            </Border>
        </Grid>

    </Grid>
</Window>