Windows phone 7 LongListSelector:动态GridCellSize
我有一个LongListSelector,我有以下ViewModelWindows 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似乎需要为常量,并应用于所有元素 有什么方法可以做到这一点吗?在一行中,我可以说您可以将网格高度和宽度属性绑定到一些双重属性,并可以在您的逻辑上处理它。但我还有一些用于逻辑的代码。希望
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>