如何在XAML中将控件的内容绑定到VIEW类型的属性



我想为我的应用程序做一个通用设置页面。我有一个不同类型的设置列表,每个对应以下界面:

public interface ISettings
{
string SectionLabel { get; }
View SectionView  { get; }
}

每种类型的设置表示应用程序设置的一个给定方面或部分。目标是使每种类型的设置都能定义自己的外观和调整自己值的方式。

我有一个设置页面,其中列出了所有设置:public List setingssections {get =>App.AppSettings.SettingsSections;}

在XAML设置页面中,我想这样显示它们:

<StackLayout BindableLayout.ItemsSource="{Binding settingsSections, Source={x:Reference this}}" Padding="0" BackgroundColor="White">
<BindableLayout.ItemTemplate>
<DataTemplate>
<xct:Expander>
<xct:Expander.Header>
<StackLayout Orientation="Horizontal">
<Image Source="{Helpers:ImageResource Images.filledDownArrow.png}" HeightRequest="{Binding Source={x:Reference heightRef}, Path=Height, Converter={Helpers:IntMultiplier Multiplier=0.99}}"
HorizontalOptions="Start"
VerticalOptions="Center">
<Image.Triggers>
<DataTrigger TargetType="Image"
Binding="{Binding Source={RelativeSource AncestorType={x:Type xct:Expander}}, Path=IsExpanded}"
Value="True">
<Setter Property="Source"
Value="{Helpers:ImageResource Images.filledRightArrow.png}" />
</DataTrigger>
</Image.Triggers>
</Image>
<Label x:Name="heightRef" Text="{Binding SectionLabel}"
FontAttributes="Bold"
FontSize="Medium" />
</StackLayout>
</xct:Expander.Header>

<xct:Expander.Content="{Binding SectionView}"/>
</xct:Expander>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>

当然,这行不行:

<xct:Expander.Content="{Binding View}"/>

我怎样才能达到我的目标?有人能帮帮我吗?我认为我不能使用自定义控件,因为我应该根据所引用的设置的实际类型来改变stacklayout的每一行/每一节控件的类型。

选项1

你不需要在这里指定xct:Expander.Content,无论你放在那里,都会隐式地设置Content属性。

代替

<xct:Expander.Content="{Binding SectionView}"/>

<ContentView Content="{Binding SectionView}"/>

选项2

这样指定:

<DataTemplate>
<xct:Expander Content="{Binding SectionView}">
<xct:Expander.Header>
...

相关内容

  • 没有找到相关文章

最新更新