ListViewなどでListViewには表データをバインディングしている場合において(バインディングしている表データではない)ViewModelのプロパティをバインディングするには
例)
ListDataにはこんな形でViewModel内のプロパティとして入っているとします。
ObservableCollection<dataClass> ListData =
new ObservableCollection<dataClass>()
{
new dataClass("data1"),
new dataClass("data2"),
new dataClass("data3"),
};
private string viewModelsProperty;
public string ViewModelsProperty
{
get => viewModelsProperty;
set
{
viewModelsProperty = value;
OnPropertyChanged(nameof(ViewModelsProperty));
}
}
そのまま👇のようにしても表示できません
<ListView
ItemsSource="{Binding ListData}"/>
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding ViewModelsProperty"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
dataClassのViewModelsPropertyというプロパティであれば表示されます
👇のようにSource={RelativeSource AncestorType=・・・}として指定します
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamlSamples.HelloXamlPage"
xmlns:ViewModels="clr-namespace:AppNameSpace.ViewModels"
Title="Hello XAML Page">
--省略--
<ListView
ItemsSource="{Binding ListData}"/>
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding ViewModelsProperty,
Source={RelativeSource AncestorType={x:Type ViewModels:ThisViewModel}}}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
サンプルコードの検証が出来ていません
不具合・修正要望などありましたらコメントお願いします
参考
https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/relative-bindings
:::