例如,我是否有两个列表,一个包含一个尚未完成但仍可以更新的文件,一个包含已经完成的文件,因为我可以自动更新,而我却没有需要更多代码吗?
这里是更新/打开和插入列表时的代码:
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();
}
,这里是手动完成时的代码:
public void Finalizar()
{
var ciclos = CiclosEmAndamentoSelecionados;
if (MessageBox.Show("Deseja enviar a secagem selecionada para os ciclos finalizados?",
"Tem certeza?",
MessageBoxButton.YesNo,
MessageBoxImage.Question) != MessageBoxResult.Yes)
{
return;
}
var db = new CrgContext();
foreach (var ciclo in ciclos)
{
ciclo.Finalizado = true;
db.Ciclos.AddOrUpdate(ciclo);
}
db.SaveChanges();
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>
答案 0 :(得分:0)
您可以使用以下代码:
ICollectionView视图= CollectionViewSource.GetDefaultView(ItemsSource); view.Refresh();