👻

XAMLでプロパティのプロパティをバインドする

2024/05/23に公開

きっかけ

複数ViewModelが共通して持つSharedViewModelがあるとき、ViewにSharedViewModelのプロパティを簡単にバインドできて便利だったのでメモとして残します。

TL;DR

ItemsSource="{Binding Shared.Items}"みたいに書ける。

環境

C#
.NET 8.0
.NET MAUI
CommunityToolkit.Mvvm

ソースコード

ViewModel.cs
public partial class ViewModel : ObservableObject
{
    public ViewModel(SharedViewModel sharedViewModel)
    {
        Shared = sharedViewModel;
    }

    public SharedViewModel Shared { get; }

    [ObservableProperty]
    public Item selectedItem
}
SharedViewModel.cs
public partial class SharedViewModel : ObservableObject
{
    [ObservableProperty]
    private List<Item> items = [];
}
View(抜粋).xaml
<CollectionView ItemsSource="{Binding Shared.Items}"
                SelectedItem="{Binding SelectedItem}"
</CollectionView>

こうするともっと良いよというのがあればぜひ教えて下さい!

Discussion