显示在GridView控件以前的选择(Show previous selection in Grid

2019-11-02 05:53发布

我在开发Windows 8商店应用。 我想显示GridView控件之前选择的项目,如果向后导航回回,所选项目应显示selected.I尝试本教程

并没有确切的建议。 但它不是我的情况下工作。 我也试图与指数

 int index = myGridView.SelectedIndex

因此,要找到指数和直接提供

myGridView.SelectedIndex = index ; 

但其又没有用,因为我没有得到改变成索引

SelectionChanged(object sender, SelectionChangedEventArgs e){};

什么工作是

myGridView.SelectAll(); 

它选择的所有元素。 但我不希望这样。 请帮我? 提前致谢

请参考我的代码

<GridView x:Name="MyList" HorizontalAlignment="Left" VerticalAlignment="Top" Width="auto" Padding="0" Height="600" Margin="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Multiple" SelectionChanged="names_SelectionChanged" ItemClick="mylist_ItemClick" SelectedItem="{Binding Path=selectedItem}">
                    <GridView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Width="260" Height="80">                                    
                                <TextBlock Text="{Binding Path=Name}" Foreground="White" d:LayoutOverrides="Width" TextWrapping="Wrap"/>                                    
                            </StackPanel>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>

这是我处理的类

 public sealed partial class MyClass: MyApp.Common.LayoutAwarePage, INotifyPropertyChanged
{
    SQLite.SQLiteAsyncConnection db;

    public MyClass()
    {
        this.InitializeComponent();
        Constants.sourceColl = new ObservableCollection<MyModel>();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
       getData();
       foreach (MyModel item in Constants.sourceColl)
       MyList.SelectedItems.Add(item);
    }

    private async void getData()
    {
        List<MyModel> mod = new List<MyModel>();
        var query = await db.Table<MyModel>().Where(ch => ch.Id_Manga == StoryNumber).ToListAsync();
        foreach (var _name in query)
        {
            var myModel = new MyModel()
            {
                Name = _name.Name
            };

            mod.Add(myModel);
            Constants.sourceColl.Add(myModel);
        }
        MyList.ItemsSource = mod;
    }

    private void names_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {            
        GridView myGridView = sender as GridView;
        if (myGridView == null) return;
        Constants.sourceColl = (ObservableCollection<MyModel>)myGridView.SelectedItems;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private MyModel _selectedItem;

    public MyModel selectedItem
    {
        get
        {
            return _selectedItem;
        }
        set
        {
            if (_selectedItem != value)
            {
                _selectedItem = value;
                NotifyPropertyChanged("selectedItem");
            }
        }
    }
}

这里是我的模型

class MyModel
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }
    public String Name { get; set; }
}

Answer 1:

拉胡尔你好我刚才解决你面临的问题是不完美的方式,但它会在你的代码工作。 尽量遵循它。 首先我做了哪些存储先前所选项目(lstSubSelectedItems)一个单独的类..这样

public class checkClass 
{
    static ObservableCollection<Subject> _lstSubSelectedItems = new ObservableCollection<Subject>();


    static checkClass chkclss;

    public static checkClass GetInstance()
    {
        if (chkclss == null)
        {
            chkclss =  new checkClass();
        }
        return chkclss;
    }



    public ObservableCollection<Subject> lstSubSelectedItems
    {
        get
        {
            return _lstSubSelectedItems;
        }
        set
        {
            _lstSubSelectedItems = value;
        }

    }

}

我有这样的pagenavigationfrom方法充满lstSubSelectedItems ..这里lstsub是selectedsubjects ..

 protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        checkClass obj = checkClass.GetInstance();
        obj.lstSubSelectedItems = lstsub;
    }

这里是什么样的解决方法我在构造函数中所做的......我在这里删除使用gridview.selecteditems的RemoveAt移除功能的非选择的项目其他功能都没有这样做此为(我不知道为什么)。 主题类就像你的模型类。 并且还设置selecteditems的不工作我为什么选择这种方式...希望这有助于。

 public SelectSubject()
    {
        this.InitializeComponent(); // not required 
        objselectsubjectViewmodel = new SelectSubjectViewModel(); // not required 
        groupedItemsViewSource.Source = objselectsubjectViewmodel.Categories; // not required the way set the itemssource of grid.
        this.DataContext = this;
        checkClass obj = checkClass.GetInstance();

        if (obj.lstSubSelectedItems.Count > 0)
        {
         //   List<Subject> sjsfj = new List<Subject>();
            //    ICollection<Subject> fg = new ICollection<Subject>();
            itemGridView.SelectAll();
         //   int i = 0;
            List<int> lstIndex = new List<int>();



            foreach (Subject item1 in itemGridView.SelectedItems)
            {
                foreach (var item3 in obj.lstSubSelectedItems)
                {
                    if (item3.SubjectCategory == item1.SubjectCategory && item3.SubjectName == item1.SubjectName)
                    {
                        lstIndex.Add(itemGridView.SelectedItems.IndexOf(item1));
                    }
                }
            }

            int l = itemGridView.SelectedItems.Count;

            for (int b = l-1; b >= 0; b--)
            {
                if (!lstIndex.Contains(b))
                {
                    itemGridView.SelectedItems.RemoveAt(b);
                }
            }
        }


    }

告诉我,如果你的作品?



Answer 2:

您可以设置GridView控件的selectedItems属性中这样做的第一个化妆的ObservableCollection和不断更新你的GridView的selectionChange事件此集合。 当你复出此页面上设置GridViewName.SelectedItems = aboveCollection;

  private ObservableCollection<Subject> lstsub = new ObservableCollection<Subject>() ;



    private void itemGridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       checkTemp = 1;
        GridView tempObjGridView = new GridView();
        tempObjGridView = sender as GridView;  
        lstsub = tempObjGridView.SelectedItems;
    }
 protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {
       yourGridName.SelectedItems = lstsub ;
    }


文章来源: Show previous selection in GridView