我创建了一个CollectionView,里面有一个自定义视图。
我想动态指定customview的属性,因此我向customView添加了一个绑定值,但是显然它需要在绑定数据中添加一个属性。
但是我想在cs文件中指定它。
<CollectionView ItemsSource="{Binding Items}">
<CollectionView.ItemTemplate>
<DataTemplate>
<local:MyView WidthRequest="{Binding Width}"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
很明显,我需要在Items中添加一个Width属性。但是我不想要它。 反正有做吗?
答案 0 :(得分:1)
与按钮和图片不同。如果您未设置子元素,则 ContentView 将没有默认大小。
因此,如果要在运行时设置大小,最好使用数据绑定。如果您不想在模型中定义属性并进行多次设置,则可以设置ContentView的绑定路径。这样,您应该确保每一行都具有相同的高度。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:XXX"
mc:Ignorable="d"
x:Name="contentPage" // set the name
x:Class="XXX.MainPage">
<local:MyView HeightRequest="{Binding Source={x:Reference contentPage},Path=BindingContext.Height}" />
public double Height {get; private set;}
答案 1 :(得分:0)
尝试使用<Grid>
并将其宽度指定为Auto
的一列
而不是绑定动态Width
:
<CollectionView ItemsSource="{Binding Items}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<local:MyView Grid.Column="0"/>
<Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
答案 2 :(得分:0)
我有一个更好的解决方案。
我创建了一种样式,用于指定customView的/*function get($url,$test,...$morearg)*/
和HeightReqeust
。
然后在cs文件中指定值。
到目前为止,我还没有找到更好的解决方案。