Simple coinlist
ADD
WalletWasabi.Fluent/ViewModels/Wallets/Advanced/WalletCoins/WalletCoinViewModel.cs
+using NBitcoin;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WalletWasabi.Blockchain.Analysis.Clustering;
+using WalletWasabi.Blockchain.TransactionOutputs;
+
+namespace WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoins
+{
+ public partial class WalletCoinViewModel : ViewModelBase
+ {
+ [AutoNotify] private Money _amount;
+ [AutoNotify] private int _anonymitySet;
+ [AutoNotify] private SmartLabel _smartLabel;
+ [AutoNotify] private bool _confirmed;
+
+ public WalletCoinViewModel(SmartCoin coin)
+ {
+ Amount = coin.Amount;
+ AnonymitySet = coin.HdPubKey.AnonymitySet;
+ SmartLabel = coin.HdPubKey.Cluster.Labels;
+ Confirmed = coin.Confirmed;
+ }
+ }
+}

ADD
WalletWasabi.Fluent/ViewModels/Wallets/Advanced/WalletCoins/WalletCoinsViewModel.cs
+using DynamicData;
+using ReactiveUI;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive;
+using System.Reactive.Disposables;
+using System.Reactive.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WalletWasabi.Fluent.ViewModels.Navigation;
+
+namespace WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoins
+{
+ [NavigationMetaData(Title = "Wallet Coins")]
+ public partial class WalletCoinsViewModel : RoutableViewModel
+ {
+ private readonly WalletViewModel _walletViewModel;
+ private readonly IObservable<Unit> _balanceChanged;
+
+ private readonly ReadOnlyObservableCollection<WalletCoinViewModel> _coins;
+ private readonly SourceList<WalletCoinViewModel> _confirmationWordsSourceList = new();
+
+ public WalletCoinsViewModel(WalletViewModel walletViewModel, IObservable<Unit> balanceChanged)
+ {
+ SetupCancel(false, true, true);
+ NextCommand = CancelCommand;
+ _walletViewModel = walletViewModel;
+ _balanceChanged = balanceChanged;
+
+ _confirmationWordsSourceList
+ .Connect()
+ .ObserveOn(RxApp.MainThreadScheduler)
+ .Bind(out _coins)
+ .Subscribe();
+ }
+
+ public ReadOnlyObservableCollection<WalletCoinViewModel> Coins => _coins;
+
+ protected override void OnNavigatedTo(bool isInHistory, CompositeDisposable disposables)
+ {
+ base.OnNavigatedTo(isInHistory, disposables);
+
+ Observable.Merge(
+ _balanceChanged.Select(_ => Unit.Default),
+ _walletViewModel.WhenAnyValue(w => w.IsCoinJoining).Select(_ => Unit.Default))
+ .Subscribe(_ =>
+ {
+ Update();
+ }
+ );
+
+ disposables.Add(_confirmationWordsSourceList);
+ }
+
+ private void Update()
+ {
+ var coins = _walletViewModel.Wallet.Coins.Select(c => new WalletCoinViewModel(c));
+
+ _confirmationWordsSourceList.Clear();
+ _confirmationWordsSourceList.AddRange(coins);
+ }
+ }
+}

DELETE
WalletWasabi.Fluent/ViewModels/Wallets/Advanced/WalletCoinsViewModel.cs
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WalletWasabi.Fluent.ViewModels.Navigation;
-
-namespace WalletWasabi.Fluent.ViewModels.Wallets.Advanced
-{
- [NavigationMetaData(Title = "Wallet Coins")]
- public partial class WalletCoinsViewModel : RoutableViewModel
- {
- public WalletCoinsViewModel(WalletViewModelBase walletViewModelBase)
- {
- SetupCancel(false, true, true);
- NextCommand = CancelCommand;
- }
- }
-}

MODIFY
WalletWasabi.Fluent/ViewModels/Wallets/WalletViewModel.cs
WalletWasabi.Fluent/ViewModels/Wallets/WalletViewModel.cs
@@ -18,6 +18,7 @@ using WalletWasabi.Fluent.ViewModels.Wallets.Receive;
using WalletWasabi.Fluent.ViewModels.Wallets.Send;
using WalletWasabi.WabiSabi.Client;
using WalletWasabi.Wallets;
+using WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoins;
namespace WalletWasabi.Fluent.ViewModels.Wallets
{
@@ -145,7 +146,7 @@ namespace WalletWasabi.Fluent.ViewModels.Wallets
WalletSettingsCommand = ReactiveCommand.Create(() => Navigate(NavigationTarget.DialogScreen).To(Settings));
- WalletCoinsCommand = ReactiveCommand.Create(() => Navigate(NavigationTarget.DialogScreen).To(new WalletCoinsViewModel(this)));
+ WalletCoinsCommand = ReactiveCommand.Create(() => Navigate(NavigationTarget.DialogScreen).To(new WalletCoinsViewModel(this, balanceChanged)));
}
public WalletSettingsViewModel Settings { get; }

ADD
WalletWasabi.Fluent/Views/Wallets/Advanced/WalletCoins/WalletCoinsView.axaml
+<UserControl xmlns="https://github.com/avaloniaui"
+ 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:c="using:WalletWasabi.Fluent.Controls"
+ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+ xmlns:walletcoins="clr-namespace:WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoins"
+ xmlns:conv="clr-namespace:WalletWasabi.Fluent.Converters"
+ x:DataType="walletcoins:WalletCoinsViewModel"
+ x:CompileBindings="True"
+ x:Class="WalletWasabi.Fluent.Views.Wallets.Advanced.WalletCoins.WalletCoinsView">
+ <c:ContentArea Title="{Binding Title}"
+ EnableNext="True" NextContent="Done"
+ EnableCancel="{Binding EnableCancel}"
+ EnableBack="{Binding EnableBack}">
+ <DataBox Items="{Binding Coins}"
+ CanUserSortColumns="True">
+ <DataBox.Columns>
+
+ <DataBoxTemplateColumn Width="Auto"
+ CanUserSort="False"
+ Header="">
+ <DataBoxTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Panel VerticalAlignment="Center" x:DataType="walletcoins:WalletCoinViewModel">
+ <!-- Confirmed -->
+ <PathIcon IsVisible="{Binding Confirmed}"
+ Data="{StaticResource checkmark_filled}"
+ Foreground="{DynamicResource SystemAccentColor}"
+ Height="11"
+ ToolTip.Tip="Confirmed" />
+ <!-- Pending -->
+ <PathIcon IsVisible="{Binding !Confirmed}"
+ Data="{StaticResource clock_regular}"
+ Height="14"
+ Opacity="0.6"
+ ToolTip.Tip="Pending" />
+ </Panel>
+ </DataTemplate>
+ </DataBoxTemplateColumn.CellTemplate>
+ </DataBoxTemplateColumn>
+
+ <DataBoxTemplateColumn Width="Auto"
+ CanUserSort="False"
+ Header="Amount">
+ <DataBoxTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding Amount}" Margin="5 0" VerticalAlignment="Center" x:DataType="walletcoins:WalletCoinViewModel"></TextBlock>
+ </DataTemplate>
+ </DataBoxTemplateColumn.CellTemplate>
+ </DataBoxTemplateColumn>
+
+ <DataBoxTemplateColumn Width="60"
+ CanUserSort="False"
+ Header="Anon">
+ <DataBoxTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding AnonymitySet}" Margin="5 0" VerticalAlignment="Center" x:DataType="walletcoins:WalletCoinViewModel"></TextBlock>
+ </DataTemplate>
+ </DataBoxTemplateColumn.CellTemplate>
+ </DataBoxTemplateColumn>
+
+ <DataBoxTemplateColumn Width="Auto"
+ CanUserSort="False"
+ Header="SmartLabel">
+ <DataBoxTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <c:TagsBox IsReadOnly="True"
+ Margin="5 0"
+ VerticalAlignment="Center"
+ Items="{Binding SmartLabel}"
+ x:DataType="walletcoins:WalletCoinViewModel" />
+ </DataTemplate>
+ </DataBoxTemplateColumn.CellTemplate>
+ </DataBoxTemplateColumn>
+ </DataBox.Columns>
+ </DataBox>
+ </c:ContentArea>
+</UserControl>

RENAME
WalletWasabi.Fluent/Views/Wallets/Advanced/WalletCoinsView.axaml.cs
WalletWasabi.Fluent/Views/Wallets/Advanced/WalletCoins/WalletCoinsView.axaml.cs
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace WalletWasabi.Fluent.Views.Wallets.Advanced
+namespace WalletWasabi.Fluent.Views.Wallets.Advanced.WalletCoins
{
public class WalletCoinsView : UserControl
{

DELETE
WalletWasabi.Fluent/Views/Wallets/Advanced/WalletCoinsView.axaml
-<UserControl xmlns="https://github.com/avaloniaui"
- 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:c="using:WalletWasabi.Fluent.Controls"
- mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- xmlns:advanced="clr-namespace:WalletWasabi.Fluent.ViewModels.Wallets.Advanced"
- xmlns:conv="clr-namespace:WalletWasabi.Fluent.Converters"
- x:DataType="advanced:WalletCoinsViewModel"
- x:CompileBindings="True"
- x:Class="WalletWasabi.Fluent.Views.Wallets.Advanced.WalletCoinsView">
- <c:ContentArea Title="{Binding Title}"
- EnableNext="True" NextContent="Done"
- EnableCancel="{Binding EnableCancel}"
- EnableBack="{Binding EnableBack}">
- </c:ContentArea>
-</UserControl>

Simple coinlist