如何预先选择在C#/ XAML Windows 8应用多的ListView / GridView的项目? [英] How to pre-select multiple listview/gridview items in C#/XAML windows 8 app?

查看:94
本文介绍了如何预先选择在C#/ XAML Windows 8应用多的ListView / GridView的项目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序有我的自定义类的GridView控件。我使用自定义的数据模板和值从SQLite的约束。现在,当用户启动应用程序时,某些项目(不是单)应在GridView控件/列表视图预选。 GridView控件/列表视图允许多项选择。 ?我如何与SelectedItem属性做到这一点。



更新:我遵循的this ,它不为我工作。返回0选项



更新2:我已经发布的代码



 无效MainPage_Loaded(对象发件人,RoutedEventArgs E)
{
使用(VAR DB =新SQLite.SQLiteConnection(DBPATH))
{
lvTags.ItemsSource = db.Table< Database.Tag>(); // lvTags是列表视图

如果(MyList.Count大于0)// MYLIST是阶级Database.Tag
{
的foreach(VAR在项目的静态列表MYLIST)
的foreach(在lvTags.Items VAR LVITEM)
如果(lvitem.Equals(项目))
lvTags.SelectedItems.Add(LVITEM);
}
}
}



更新3:

 公共覆盖布尔等于(obj对象)
{
标签标记= OBJ时标签;
如果(this.TagID == tag.TagID&放大器;&安培; this.TagName == tag.TagName)
返回真;
,否则
返回FALSE;
}


解决方案

从<一个最后得到的答案HREF =http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/48fb5a15-e61d-415a-ae9c-78ae07f042c1/> MSDN 。由于 ForInfo



XAML页面

 <网格背景={StaticResource的ApplicationPageBackgroundThemeBrush}> 
< ListView的X:名称=ListView控件的SelectionMode =多>
< ListView.ItemTemplate>
<&DataTemplate的GT;
< StackPanel的方向=横向>
<文本框的文本={绑定ID}保证金=0,0,5,0/>
<文本框的文本={结合标题}/>
< / StackPanel的>
< / DataTemplate中>
< /ListView.ItemTemplate>
< /&的ListView GT;
< /网格和GT;



C#



 公共密封部分类的MainPage:第
{
公众的MainPage()
{
this.InitializeComponent();
LoadData();
}
保护覆盖无效的OnNavigatedTo(NavigationEventArgs E)
{
}
&的ObservableCollection LT; KiwiItem> sourceColl;
&IList的LT; KiwiItem> selectionList;
公共无效LoadData()
{
VAR DBPATH = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Pathdb.sqlite);

// Exec的
使用(1)(VAR DB =新SQLite.SQLiteConnection(DBPATH))
{
db.DropTable< KiwiItem>();
db.CreateTable< KiwiItem>();
db.RunInTransaction(()=>
{
db.Insert(新KiwiItem(){ID = 1,标题=MyTitle1});
db.Insert (新KiwiItem(){ID = 2,标题=MyTitle2});
db.Insert(新KiwiItem(){ID = 3,标题=MyTitle3});
db.Insert (新KiwiItem(){ID = 4,标题=MyTitle4});
});
this.sourceColl =新的ObservableCollection< KiwiItem>();
this.selectionList =新的List< KiwiItem>();
//查询数据库。在实践中,根据业务场景
的foreach填补sourceColl(以db.Table< KiwiItem项目; KiwiItem>())
{
this.sourceColl.Add(项目);
如果(item.ID == 2 || item.ID == 4)
this.selectionList.Add(项目);
}
}

//执行exec(2)
this.listView.ItemsSource = this.sourceColl;
的foreach(在this.selectionList KiwiItem项)
this.listView.SelectedItems.Add(项目);
}
}
公共类KiwiItem
{
[SQLite.AutoIncrement,SQLite.PrimaryKey]
公众诠释ID {搞定;组; }
公共字符串名称{搞定;组; }
}


in my app there is gridview of my custom class. I am using custom data template and values are bound from SQLite. Now when user launch the app, the certain items (NOT SINGLE) should be pre-selected in gridview/listview. Gridview/listview allows multiple selection. How can I achieve this with SelectedItem property ?

UPDATE : I have followed this, it doesn't work for me. Returns 0 selections.

UPDATE 2 : I have posted the code

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

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

解决方案

Finally got answer from MSDN. Thanks ForInfo

XAML page

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

这篇关于如何预先选择在C#/ XAML Windows 8应用多的ListView / GridView的项目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆