Added newControl and fixed DataGrid.
This commit is contained in:
1 parent
0e5be04b02
commit
8c53024d5c
17 files changed
+129
-91
No files matched your search
@@ -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(),
|
||||
};
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Reactive.Linq;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using PcgsInvUi.Models;
|
||||
using PcgsInvUi.Services;
|
||||
using ReactiveUI;
|
||||
@@ -8,27 +10,37 @@ namespace PcgsInvUi.ViewModels;
|
||||
|
||||
public class MainWindowViewModel : ViewModelBase
|
||||
{
|
||||
public CoinListViewModel List { get; }
|
||||
private ViewModelBase _mainContent;
|
||||
private ViewModelBase _sideContent;
|
||||
|
||||
public MainWindowViewModel(CoinCollection coins)
|
||||
public bool PaneOpen
|
||||
{
|
||||
List = new CoinListViewModel(coins.GetItems());
|
||||
MainContent = List;
|
||||
get => _paneOpen;
|
||||
set => this.RaiseAndSetIfChanged(ref _paneOpen, value);
|
||||
}
|
||||
|
||||
public ViewModelBase MainContent
|
||||
{
|
||||
get => _mainContent;
|
||||
private set => this.RaiseAndSetIfChanged(ref _mainContent, value);
|
||||
}
|
||||
|
||||
public ViewModelBase SidebarContent
|
||||
{
|
||||
get => _sideContent;
|
||||
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()
|
||||
{
|
||||
@@ -38,20 +50,30 @@ public class MainWindowViewModel : ViewModelBase
|
||||
newViewModel.OkCommand,
|
||||
newViewModel.CancelCommand.Select(_ => (Coin?)null))
|
||||
.Take(1)
|
||||
.Subscribe(model =>
|
||||
.Subscribe(newCoin =>
|
||||
{
|
||||
if (model != null)
|
||||
List.CoinCollection.Add(model);
|
||||
if (newCoin != null)
|
||||
{
|
||||
// This raises a CollectionChanged event, which *should* update the UI, but doesn't.
|
||||
CoinCollection.Add(newCoin);
|
||||
// Update view
|
||||
TotalValue += newCoin.TotalPrice;
|
||||
|
||||
// Setting main content to null and then back to the main view model works just fine.
|
||||
// TotalValue updates just fine.
|
||||
}
|
||||
|
||||
MainContent = List;
|
||||
SidebarContent = null;
|
||||
PaneOpen = false;
|
||||
});
|
||||
|
||||
MainContent = newViewModel;
|
||||
SidebarContent = newViewModel;
|
||||
PaneOpen = true;
|
||||
}
|
||||
|
||||
public void EditItem()
|
||||
{
|
||||
var editViewModel = new EditViewModel(List.SelectedCoin);
|
||||
var editViewModel = new EditViewModel(SelectedCoin);
|
||||
}
|
||||
|
||||
public void DeleteItem()
|
||||
|
||||
@@ -43,7 +43,9 @@ public class NewViewModel : ViewModelBase
|
||||
OkCommand = ReactiveCommand.Create(
|
||||
() => new Coin { PcgsNumber = Int32.Parse(PcgsNumber),
|
||||
Grade = Grade,
|
||||
Quantity = Int32.Parse(Quantity) },
|
||||
Quantity = Int32.Parse(Quantity),
|
||||
PriceGuideValue = 100.0
|
||||
},
|
||||
okEnabled);
|
||||
|
||||
CancelCommand = ReactiveCommand.Create(() => { });
|
||||
|
||||
@@ -6,68 +6,5 @@
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="PcgsInvUi.Views.CoinListView"
|
||||
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>
|
||||
@@ -6,10 +6,71 @@
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="PcgsInvUi.Views.MainWindow" x:DataType="viewModels:MainWindowViewModel"
|
||||
Title="MainWindow">
|
||||
<SplitView Name="Sidebar">
|
||||
<SplitView IsPaneOpen="{Binding PaneOpen}"
|
||||
DisplayMode="Overlay"
|
||||
PanePlacement="Right">
|
||||
<SplitView.Pane>
|
||||
<UserControl Content="{Binding SidebarContent}"/>
|
||||
<UserControl VerticalAlignment="Center" Content="{Binding SidebarContent}"/>
|
||||
</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>
|
||||
</Window>
|
||||
@@ -1,10 +1,12 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.ReactiveUI;
|
||||
using PcgsInvUi.ViewModels;
|
||||
|
||||
namespace PcgsInvUi.Views;
|
||||
|
||||
public partial class MainWindow : Window
|
||||
public partial class MainWindow : ReactiveWindow<MainWindowViewModel>
|
||||
{
|
||||
// TODO New window.
|
||||
// TODO Edit window.
|
||||
@@ -20,7 +22,7 @@ public partial class MainWindow : Window
|
||||
// TODO API request tracker (1000 per day)
|
||||
// TODO API update schedules (per month? manual override? needs to store a date of last update in the coin object)
|
||||
|
||||
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<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}"/>
|
||||
<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}"/>
|
||||
<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}"/>
|
||||
|
||||
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.
Reference in new issue
Block a user