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

1行で、グリッドの高さと幅のプロパティをいくつかのダブルプロパティにバインドして、ロジックで処理できると言えます..しかし、ロジックのコードもいくつかあります..

最初に、longlistSelector の項目で使用するいくつかのプロパティを作成した ListData のクラスを作成しました..ここにクラスがあります..

 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; }

}

これで、LongListSelector itemsSourceプロパティがバインドされるObservableCollectionを作成しました。

  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();
    }

これですべての準備が整いました.. Data があり、ページの 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>

ここで..すべてのことが行われています..今あなたのロジックが必要です..それがあなたを助けることを願っています..

于 2013-07-25T12:28:44.473 に答える