2

我有一个 LongListSelector,我有以下 ViewModel

ViewModel: 
    List<ListData>

ListData:
    Text
    Image

我需要取决于 ListData 的动态单元格大小。

如果 Text 不存在,我将隐藏图像并使 GridCellSize = 50。如果 Image 存在,则 GridCellSize 应为 250,250;

它看起来像这样:

 +---------+   +---------+
 |  Text   |   |  Text   |
 +---------+   +---------+
 +---------+   +---------+
 |  Text   |   |  Text   |
 +---------+   +---------+
 +---------+   +---------+
 |         |   |         |
 |         |   |         |
 |  Image  |   |  Image  |
 |         |   |         |
 |         |   |         |
 +---------+   +---------+
 +---------+   +---------+
 |         |   |         |
 |         |   |         |
 |  Image  |   |  Image  |
 |         |   |         |
 |         |   |         |
 +---------+   +---------+

我尝试使用转换器更改 GridCellSize,但似乎 GridCellSize 对于 LongListSelector 需要保持不变并适用于所有元素。

有什么办法可以做到这一点?

4

1 回答 1

0

在一行中,我可以说你可以将你的网格高度和宽度属性绑定到一些双重属性,并可以在你的逻辑上处理它..但我也有一些代码用于你的逻辑。希望它可以帮助你..

所以首先创建了一个ListData类,我在其中创建了一些属性,这些属性将由longlistSelector的项目使用..这里是类..

 public class ListData
{


    public double height { get; set; }
    public double width { get; set; }

    public string text { get; set; }
    public string ImagePath { get; set; }
    public Visibility isTextVisible { get; set; }
    public Visibility isImageVisible { get; set; }

}

现在我创建了一个ObservableCollection,您的LongListSelector itemsSource属性将与它绑定..

  public ObservableCollection<ListData> ListOfData { get; set; }

现在我已经用数据填充了这个集合..这里的数据是你的ListData类对象,具有不同的属性值,它将反映在你的LongListSelector 项中..我已经在我的主页构造函数中填充了它..

 public MainPage()
    {
        InitializeComponent();
        ListOfData = new ObservableCollection<ListData>();
        ListData sd = new ListData();
        sd.ImagePath = "/Assets/1.jpg";
        sd.text = "";
        sd.isTextVisible = Visibility.Collapsed;
        sd.isImageVisible = Visibility.Visible;
        sd.height = 250;
        sd.width = 250;

        ListData sd1 = new ListData();
        sd1.ImagePath = "/Assets/1.jpg";
        sd1.text = "afhjkahfjkahjkghadgjkgjkv";
        sd1.isTextVisible = Visibility.Visible;
        sd1.isImageVisible = Visibility.Collapsed;
        sd1.height = 50;
        sd1.width = 50;

        ListOfData.Add(sd);
        ListOfData.Add(sd1);
        ListOfData.Add(sd);
        ListOfData.Add(sd1);
        ListOfData.Add(sd);
        ListOfData.Add(sd1);
        ListOfData.Add(sd);
        ListOfData.Add(sd1);

        this.DataContext = this;

        // Sample code to localize the ApplicationBar
        //BuildLocalizedApplicationBar();
    }

现在一切都准备好了..我已经设置了页面的数据和数据上下文..所以剩下的是你定义了 LingListSelector 的 xaml 页面..这里我已经绑定了每个属性..只是为了你的方便..

 <phone:LongListSelector Grid.Row="0" ItemsSource="{Binding ListOfData}">
        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
                <Grid Height="{Binding height}" Width="{Binding width}" >
                    <TextBlock Text="{Binding Path=text}" Visibility="{Binding isTextVisible}"/>
                    <Image Source="{Binding Path=ImagePath}" Visibility="{Binding isImageVisible}"  />
                </Grid>
            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
    </phone:LongListSelector>

在这里..所有事情都在完成..它现在需要你的逻辑..希望它可以帮助你..

于 2013-07-25T12:28:44.473 回答