Added newControl and fixed DataGrid.

This commit is contained in:
alphafetus committed 2023-10-10 09:17:28 -04:00
1 parent 0e5be04b02
commit 8c53024d5c
17 files changed
+128 -90

No files matched your search

+14
View File
@@ -10,5 +10,19 @@ public class CoinCollection
new Coin(), new Coin(),
new Coin(), new Coin(),
new Coin(), new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
new Coin(),
}; };
} }
+42 -20
View File
@@ -1,5 +1,7 @@
using System; using System;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using PcgsInvUi.Models; using PcgsInvUi.Models;
using PcgsInvUi.Services; using PcgsInvUi.Services;
using ReactiveUI; using ReactiveUI;
@@ -8,27 +10,37 @@ namespace PcgsInvUi.ViewModels;
public class MainWindowViewModel : ViewModelBase public class MainWindowViewModel : ViewModelBase
{ {
public CoinListViewModel List { get; } public bool PaneOpen
private ViewModelBase _mainContent;
private ViewModelBase _sideContent;
public MainWindowViewModel(CoinCollection coins)
{ {
List = new CoinListViewModel(coins.GetItems()); get => _paneOpen;
MainContent = List; set => this.RaiseAndSetIfChanged(ref _paneOpen, value);
} }
public ViewModelBase MainContent
{
get => _mainContent;
private set => this.RaiseAndSetIfChanged(ref _mainContent, value);
}
public ViewModelBase SidebarContent public ViewModelBase SidebarContent
{ {
get => _sideContent; get => _sideContent;
private set => this.RaiseAndSetIfChanged(ref _sideContent, value); private set => this.RaiseAndSetIfChanged(ref _sideContent, value);
} }
public ObservableCollection<Coin> CoinCollection { get; set; }
public Coin SelectedCoin
{
get => _selectedCoin;
set => this.RaiseAndSetIfChanged(ref _selectedCoin, value);
}
public double TotalValue
{
get => _totalValue;
set => this.RaiseAndSetIfChanged(ref _totalValue, value);
}
private ViewModelBase? _sideContent;
private Coin? _selectedCoin;
private bool _paneOpen;
private double _totalValue;
public MainWindowViewModel(CoinCollection coins)
{
CoinCollection = new ObservableCollection<Coin>(coins.GetItems());
}
public void AddItem() public void AddItem()
{ {
@@ -38,20 +50,30 @@ public class MainWindowViewModel : ViewModelBase
newViewModel.OkCommand, newViewModel.OkCommand,
newViewModel.CancelCommand.Select(_ => (Coin?)null)) newViewModel.CancelCommand.Select(_ => (Coin?)null))
.Take(1) .Take(1)
.Subscribe(model => .Subscribe(newCoin =>
{ {
if (model != null) if (newCoin != null)
List.CoinCollection.Add(model); {
// This raises a CollectionChanged event, which *should* update the UI, but doesn't.
CoinCollection.Add(newCoin);
// Update view
TotalValue += newCoin.TotalPrice;
MainContent = List; // Setting main content to null and then back to the main view model works just fine.
// TotalValue updates just fine.
}
SidebarContent = null;
PaneOpen = false;
}); });
MainContent = newViewModel; SidebarContent = newViewModel;
PaneOpen = true;
} }
public void EditItem() public void EditItem()
{ {
var editViewModel = new EditViewModel(List.SelectedCoin); var editViewModel = new EditViewModel(SelectedCoin);
} }
public void DeleteItem() public void DeleteItem()
+3 -1
View File
@@ -43,7 +43,9 @@ public class NewViewModel : ViewModelBase
OkCommand = ReactiveCommand.Create( OkCommand = ReactiveCommand.Create(
() => new Coin { PcgsNumber = Int32.Parse(PcgsNumber), () => new Coin { PcgsNumber = Int32.Parse(PcgsNumber),
Grade = Grade, Grade = Grade,
Quantity = Int32.Parse(Quantity) }, Quantity = Int32.Parse(Quantity),
PriceGuideValue = 100.0
},
okEnabled); okEnabled);
CancelCommand = ReactiveCommand.Create(() => { }); CancelCommand = ReactiveCommand.Create(() => { });
+1 -64
View File
@@ -6,68 +6,5 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="PcgsInvUi.Views.CoinListView" x:Class="PcgsInvUi.Views.CoinListView"
x:DataType="viewModels:CoinListViewModel"> x:DataType="viewModels:CoinListViewModel">
<DockPanel>
<DockPanel DockPanel.Dock="Top">
<DataGrid x:Name="CollectionView"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
DockPanel.Dock="Top"
ItemsSource="{Binding CoinCollection}"
SelectedItem="{Binding SelectedCoin, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserResizeColumns="True" >
<DataGrid.Columns>
<DataGridTextColumn Header="Series" Width="*"
Binding="{Binding Series}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Year"
Binding="{Binding Year}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Mint" Width="*"
Binding="{Binding MintMark}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Denomination" Width="*"
Binding="{Binding Denomination}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Variety" Width="*"
Binding="{Binding MajorVariety}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Grade" Width="*"
Binding="{Binding Grade}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Designation" Width="*"
Binding="{Binding Designation}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Est. Price" Width="*"
Binding="{Binding PriceGuideValue}"
IsReadOnly="False"/>
<DataGridTextColumn Header="PCGS #" Width="*"
Binding="{Binding PcgsNumber}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Quantity" Width="*"
Binding="{Binding Quantity}"
IsReadOnly="False"/>
<DataGridTextColumn Header="Total Price" Width="*"
Binding="{Binding TotalPrice}"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
</DockPanel>
<DockPanel DockPanel.Dock="Bottom">
<Grid HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" ColumnDefinitions="Auto, Auto, Auto, Auto" DockPanel.Dock="Left">
<Button Grid.Column="0" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="New..."
Command="{Binding $parent[Window].((viewModels:MainWindowViewModel)DataContext).AddItem}"/>
<Button Grid.Column="1" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Edit..."
Command="{Binding $parent[Window].((viewModels:MainWindowViewModel)DataContext).EditItem}"/>
<Button Grid.Column="2" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Delete"
Command="{Binding $parent[Window].((viewModels:MainWindowViewModel)DataContext).DeleteItem}"/>
<Button Grid.Column="3" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Find..."
Command="{Binding $parent[Window].((viewModels:MainWindowViewModel)DataContext).FindItem}"/>
</Grid>
<Grid HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" ColumnDefinitions="Auto, Auto" DockPanel.Dock="Right">
<Label Grid.Column="0" Margin="5" VerticalAlignment="Center" Content="{Binding TotalValue, StringFormat='Total Value: ${0:0.00}'}" />
<Button Grid.Column="1" Margin="5" Width="150" HorizontalContentAlignment="Center" Content="Export to CSV..." />
</Grid>
</DockPanel>
</DockPanel>
</UserControl> </UserControl>
+64 -3
View File
@@ -6,10 +6,71 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="PcgsInvUi.Views.MainWindow" x:DataType="viewModels:MainWindowViewModel" x:Class="PcgsInvUi.Views.MainWindow" x:DataType="viewModels:MainWindowViewModel"
Title="MainWindow"> Title="MainWindow">
<SplitView Name="Sidebar"> <SplitView IsPaneOpen="{Binding PaneOpen}"
DisplayMode="Overlay"
PanePlacement="Right">
<SplitView.Pane> <SplitView.Pane>
<UserControl Content="{Binding SidebarContent}"/> <UserControl VerticalAlignment="Center" Content="{Binding SidebarContent}"/>
</SplitView.Pane> </SplitView.Pane>
<UserControl Content="{Binding MainContent}"/> <Grid RowDefinitions="*, Auto" ShowGridLines="True">
<DataGrid Grid.Row="0" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding CoinCollection}"
SelectedItem="{Binding SelectedCoin, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Series" Width="*"
Binding="{Binding Series}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Year"
Binding="{Binding Year}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Mint" Width="*"
Binding="{Binding MintMark}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Denomination" Width="*"
Binding="{Binding Denomination}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Variety" Width="*"
Binding="{Binding MajorVariety}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Grade" Width="*"
Binding="{Binding Grade}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Designation" Width="*"
Binding="{Binding Designation}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Est. Price" Width="*"
Binding="{Binding PriceGuideValue}"
IsReadOnly="False"/>
<DataGridTextColumn Header="PCGS #" Width="*"
Binding="{Binding PcgsNumber}"
IsReadOnly="True"/>
<DataGridTextColumn Header="Quantity" Width="*"
Binding="{Binding Quantity}"
IsReadOnly="False"/>
<DataGridTextColumn Header="Total Price" Width="*"
Binding="{Binding TotalPrice}"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
<DockPanel Grid.Row="1">
<Grid HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" ColumnDefinitions="Auto, Auto, Auto, Auto" DockPanel.Dock="Left">
<Button Grid.Column="0" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="New..."
Command="{Binding AddItem}"/>
<Button Grid.Column="1" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Edit..."
Command="{Binding EditItem}"/>
<Button Grid.Column="2" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Delete"
Command="{Binding DeleteItem}"/>
<Button Grid.Column="3" Margin="5" Width="100" HorizontalContentAlignment="Center" Content="Find..."
Command="{Binding FindItem}"/>
</Grid>
<Grid HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" ColumnDefinitions="Auto, Auto" DockPanel.Dock="Right">
<Label Grid.Column="0" Margin="5" VerticalAlignment="Center" Content="{Binding TotalValue, StringFormat='Total Value: ${0:0.00}'}" />
<Button Grid.Column="1" Margin="5" Width="150" HorizontalContentAlignment="Center" Content="Export to CSV..." />
</Grid>
</DockPanel>
</Grid>
</SplitView> </SplitView>
</Window> </Window>
+3 -1
View File
@@ -1,10 +1,12 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
using PcgsInvUi.ViewModels;
namespace PcgsInvUi.Views; namespace PcgsInvUi.Views;
public partial class MainWindow : Window public partial class MainWindow : ReactiveWindow<MainWindowViewModel>
{ {
// TODO New window. // TODO New window.
// TODO Edit window. // TODO Edit window.
+1 -1
View File
@@ -10,7 +10,7 @@
<Label Grid.Column="0" Grid.Row="0" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="PCGS #:"/> <Label Grid.Column="0" Grid.Row="0" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="PCGS #:"/>
<TextBox Grid.Column="1" Grid.Row="0" Margin="5, 5, 10, 5" Text="{Binding PcgsNumber}"/> <TextBox Grid.Column="1" Grid.Row="0" Margin="5, 5, 10, 5" Text="{Binding PcgsNumber}"/>
<Label Grid.Column="0" Grid.Row="1" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="Grade:"/> <Label Grid.Column="0" Grid.Row="1" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="Grade:"/>
<ComboBox Name="GradeChoices" Grid.Column="1" Grid.Row="1" SelectedIndex="0" Margin="5, 5, 10, 5" <ComboBox Name="GradeChoices" Grid.Column="1" Grid.Row="1" SelectedIndex="0" Margin="5, 5, 10, 5" Width="150"
ItemsSource="{Binding GradesList}" SelectedItem="{Binding Grade}"/> ItemsSource="{Binding GradesList}" SelectedItem="{Binding Grade}"/>
<Label Grid.Column="0" Grid.Row="2" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="Quantity:"/> <Label Grid.Column="0" Grid.Row="2" Margin="5, 5, 20, 5" VerticalAlignment="Center" Content="Quantity:"/>
<TextBox Grid.Column="1" Grid.Row="2" Margin="5, 5, 10, 5" Text="{Binding Quantity}"/> <TextBox Grid.Column="1" Grid.Row="2" Margin="5, 5, 10, 5" Text="{Binding Quantity}"/>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.