XAML MAUI -数据模板选择器

ki0zmccv  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(187)

假设我有一个视图模型,其中包含一组项和一个选定项。

public interface IFoo {..}

public interface IFooA : IFoo {..}

public interface IFooB : IFoo {..}

public class MyViewModel : ViewModelBase
{
    private IFoo _selectedItem;
    public IFoo SelectedItem
    {
        get => _selectedItem;
        set
        {
            _selectedItem = value;
            OnPropertyChanged();
        }
    }

    private List<IFoo> _items;
    public List<IFoo> Items
    {
        get => _items;
        set
        {
            _items = value;
            OnPropertyChanged();
        }
    }
}

在XAML中,我有一个Picker,我想根据所选项目的类型显示不同的模板。一个模板用于IFooA,另一个模板用于IFooB
我找不到在MAUI XAML中实现这一点的最佳方法。我没有看到任何模板选择器。

<Grid>
    <Picker ItemsSource="{Binding Items}" ItemDisplayBinding="{Binding Name}"  SelectedItem="{Binding SelectedItem}"/>
    <ContentPresenter>
        <!--Probably not possible with content presenter-->
    </ContentPresenter>
</Grid>
t1rydlwq

t1rydlwq1#

我觉得你可以用触发器。
假设我们有一个带有两个值的Picker:

<Picker  x:Name="picker" >
      <Picker.ItemsSource>
        <x:Array Type="{x:Type x:String}">
          <x:String>one</x:String>
          <x:String>two</x:String>
        </x:Array>
      </Picker.ItemsSource>
</Picker>

然后对于任何使用数据触发器的控件

<Label Text="CollectionView with a DataTemplateSelector"
       FontAttributes="Bold"
       HorizontalOptions="Center" >
    <Label.Triggers>
            <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference picker},Path=SelectedItem}" Value="one">
                <Setter Property="BackgroundColor" Value="Blue"/>
            </DataTrigger>
            <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference picker},Path=SelectedItem}" Value="two">
                <Setter Property="BackgroundColor" Value="Green"/>
            </DataTrigger>
    </Label.Triggers>
</Label>

有关详细信息,请参阅Triggers
希望对你有用。

相关问题