Windows phone 7 LongListSelector:动态GridCellSize

Windows phone 7 LongListSelector:动态GridCellSize,windows-phone-7,windows-phone-8,windows-phone,Windows Phone 7,Windows Phone 8,Windows Phone,我有一个LongListSelector,我有以下ViewModel ViewModel: List<ListData> ListData: Text Image 我尝试使用转换器更改GridCellSize,但对于LongListSelector,GridCellSize似乎需要为常量,并应用于所有元素 有什么方法可以做到这一点吗?在一行中,我可以说您可以将网格高度和宽度属性绑定到一些双重属性,并可以在您的逻辑上处理它。但我还有一些用于逻辑的代码。希望

我有一个LongListSelector,我有以下ViewModel

ViewModel: 
    List<ListData>

ListData:
    Text
    Image
我尝试使用转换器更改GridCellSize,但对于LongListSelector,GridCellSize似乎需要为常量,并应用于所有元素


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

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

首先创建了一个类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; }
public-observeCollection-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();
    }
public主页()
{
初始化组件();
ListOfData=新的ObservableCollection();
ListData sd=新ListData();
sd.ImagePath=“/Assets/1.jpg”;
sd.text=“”;
sd.isTextVisible=可见性。已折叠;
sd.isImageVisible=可见性.Visible;
标准差高度=250;
sd.宽度=250;
ListData sd1=新ListData();
sd1.ImagePath=“/Assets/1.jpg”;
sd1.text=“afhjkahfjkahjkghadjkgjkv”;
sd1.isTextVisible=可见性。可见;
sd1.isImageVisible=可见性。已折叠;
sd1.1高度=50;
sd1.1宽度=50;
添加(sd);
添加(sd1);
添加(sd);
添加(sd1);
添加(sd);
添加(sd1);
添加(sd);
添加(sd1);
this.DataContext=this;
//本地化ApplicationBar的示例代码
//BuildLocalizedApplicationBar();
}
现在一切都准备好了..我有了数据,页面的DataContext已经设置好..所以剩下的是定义了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>


这里..所有事情都在进行..现在需要您的逻辑..希望它能帮助您..

解决方案适用于LayoutMode=“List”但如果我设置LayoutMode=“Grid”,它会崩溃,并出现异常“System.ArgumentException:值不在预期范围内。”。顺便说一句,这似乎是框架本身的一个缺陷。当您将布局设置为网格时,请注意。实际上,longlistselector的实现应该与jumpliststyle类似。它的数据必须在此基础上定义。因此,只需检查此示例即可。“它对您的情况很有帮助。”。。
 <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>