7

私のアプリには、カスタム クラスのグリッドビューがあります。カスタム データ テンプレートを使用しており、値は SQLite からバインドされています。ユーザーがアプリを起動すると、特定の項目 (NOT SINGLE) が gridview/listview で事前に選択されている必要があります。Gridview/listview では複数選択が可能です。SelectedItem プロパティでこれを達成するにはどうすればよいですか?

更新:私はこれに従いましたが、うまくいきません。0 の選択を返します。

更新 2: コードを投稿しました

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    using (var db = new SQLite.SQLiteConnection(dbpath))
    {
        lvTags.ItemsSource = db.Table<Database.Tag>();  //lvTags is listview

        if (MyList.Count > 0) //MyList is the static list of class "Database.Tag"
        {
            foreach (var item in MyList)
                foreach (var lvitem in lvTags.Items)
                    if (lvitem.Equals(item))
                        lvTags.SelectedItems.Add(lvitem);
        }
    }
}

更新 3:

public override bool Equals(object obj)
{
    Tag tag = obj as Tag;
    if (this.TagID == tag.TagID && this.TagName == tag.TagName)
        return true;
    else
        return false;
}
4

4 に答える 4

6

最後にMSDNから回答を得ました。ありがとう情報

XAML ページ

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <ListView x:Name="listView" SelectionMode="Multiple">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBox Text="{Binding ID}" Margin="0,0,5,0"/>
                    <TextBox Text="{Binding Title}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

C#

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        LoadData();
    }
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }
    ObservableCollection<KiwiItem> sourceColl;
    IList<KiwiItem> selectionList;
    public void LoadData()
    {
        var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");

        // Exec (1)
        using (var db = new SQLite.SQLiteConnection(dbPath))
        {
            db.DropTable<KiwiItem>();
            db.CreateTable<KiwiItem>();
            db.RunInTransaction(() =>
            {
                db.Insert(new KiwiItem() { ID = 1, Title = "MyTitle1" });
                db.Insert(new KiwiItem() { ID = 2, Title = "MyTitle2" });
                db.Insert(new KiwiItem() { ID = 3, Title = "MyTitle3" });
                db.Insert(new KiwiItem() { ID = 4, Title = "MyTitle4" });
            });
            this.sourceColl = new ObservableCollection<KiwiItem>();
            this.selectionList = new List<KiwiItem>();
            // Query the db. In practice, fill the sourceColl according to your business scenario
            foreach (KiwiItem item in db.Table<KiwiItem>())
            {
                this.sourceColl.Add(item);
                if (item.ID == 2 || item.ID == 4)
                    this.selectionList.Add(item);
            }
        }

        // Exec (2)
        this.listView.ItemsSource = this.sourceColl;
        foreach (KiwiItem item in this.selectionList)
            this.listView.SelectedItems.Add(item);
    }
}
public class KiwiItem
{
    [SQLite.AutoIncrement, SQLite.PrimaryKey]
    public int ID { get; set; }
    public string Title { get; set; }
}
于 2012-10-16T07:22:26.403 に答える
2

SelectedItems プロパティを使用し、SelectedItems.Add() または SelectedItems.Remove() を呼び出して、選択項目を追加/削除できます。

GridView で ItemsSource バインディングを使用する場合、サンプル ページのように、WinRT XAML Toolkit のListViewExtensions.BindableSelection添付プロパティを使用できます (ListViewBase のサブクラスであるため、GridView でも動作するはずです) 。

于 2012-10-04T16:42:19.383 に答える
2

SelectedItems プロパティを使用できます。

    //
    // Summary:
    //     Gets the currently selected items.
    //
    // Returns:
    //     A collection of the currently selected items.
    public IList<object> SelectedItems { get; }
于 2012-10-04T07:13:01.157 に答える
-1

データバインディングを使用していないため、元の回答を削除しました。私の回答は役に立ちません。

私はあなたに役立つかもしれないこれを今見つけました:

「SelectedItems プロパティは読み取り専用であり、直接設定することはできません」

したがって、ヘルプを提供する可能性のあるソリューションについては、この記事を参照してください。

于 2012-10-04T07:34:53.953 に答える