如何在collectionview中指定绑定值?

时间:2019-11-15 11:30:40

标签: xamarin xamarin.forms

我创建了一个CollectionView,里面有一个自定义视图。

我想动态指定customview的属性,因此我向customView添加了一个绑定值,但是显然它需要在绑定数据中添加一个属性。

但是我想在cs文件中指定它。

<CollectionView ItemsSource="{Binding Items}">
<CollectionView.ItemTemplate>
<DataTemplate>
<local:MyView WidthRequest="{Binding Width}"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>

很明显,我需要在Items中添加一个Width属性。但是我不想要它。 反正有做吗?

3 个答案:

答案 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}" />

在ViewModel中

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文件中指定值。

到目前为止,我还没有找到更好的解决方案。