0

[複数選択リスト]ページに移動したときに、選択したアイテムが選択されたままにならないため、[複数選択リスト]ページに移動したときに、複数選択リスト内の特定のアイテムを事前に選択しようとしています。使用する選択した値を保持するリストを作成しました(分離されたストレージを使用して値を保存し、正しく機能するSettings.csという名前のカスタムクラスにあるStrobeBrushListという名前です)が、正しく再選択する方法がわかりませんページが移動した後、戻ったときのこれらのアイテム。

*注:ColorItemとColorHelperは、色と値を取得するために使用されるカスタムクラスでもあります

Multiselectlist.xaml

<toolkit:MultiselectList x:Name="ColorList" HorizontalAlignment="Left" VerticalAlignment="Top" Tap="ColorList_Tap">
                <toolkit:MultiselectList.ItemTemplate>
                    <DataTemplate>

                        <StackPanel Orientation="Horizontal" Margin="12,0,0,0" Grid.ColumnSpan="2">
                            <!--<Rectangle Fill="{Binding Brush}" Width="50" Height="50"/>-->
                            <CheckBox Background="{Binding Brush}"/>

                            <TextBlock Text="{Binding Name}" Margin="12,10,0,0"/>
                        </StackPanel>
                    </DataTemplate>
                </toolkit:MultiselectList.ItemTemplate>
            </toolkit:MultiselectList>

Multiselectlist.xaml.cs

List<ColorItem> solidColorBrushList;

public MultiselectlistPage()
    {
        InitializeComponent();

        solidColorBrushList = new List<ColorItem>()
        {
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FFF0F8FF"), Name = "alice blue" },
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FFFAEBD7"), Name = "antique white" },
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FF00FFFF"), Name = "aqua" },
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FF7FFFD4"), Name = "aquamarine" },
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FFF0FFFF"), Name = "azure" },  //dont translate!?
            new ColorItem { Brush = ColorHelper.ToSolidColorBrush("#FFF5F5DC"), Name = "beige" },

                   ...

        };

        this.ColorList.ItemsSource = solidColorBrushList;

        this.Loaded += new RoutedEventHandler(ColorListPage_Loaded);
    }

    void ColorListPage_Loaded(object sender, RoutedEventArgs e)
    {
        //show checkboxes when page is loaded
        this.ColorList.IsSelectionEnabled = true;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (solidColorBrushList == null)
        {
            return;
        }

        ItemContainerGenerator itemContainerGenerator = this.ColorList.ItemContainerGenerator;

        //Settings.StrobeBrushList.Value contains the list of brush items selected by the user
        foreach (SolidColorBrush scB in Settings.StrobeBrushList.Value)
        {
            //this.SetCheckBoxesSelected(true, null);
            if (scB != null)
            {                    
                foreach(ColorItem cI in solidColorBrushList)
                { 
                    //compare the color values of the lists and only select (and show checkmark?) of items in the saved list
                    if (cI.Brush.Color == scB.Color)
                    {
                        DependencyObject vI = itemContainerGenerator.ContainerFromItem(cI);
                        MultiselectItem msI = vI as MultiselectItem;
                        if (msI != null)
                        {
                            msI.IsSelected = true;
                        }
                    }
                }                    
            }
        }
    }
4

1 に答える 1

0

multiselectlist がバインドされているアイテムのリストがある場合は、バインドされたリストSelectedItemsに追加する前に、「選択したアイテム」をリストのコレクションに追加するだけです。

このようないくつかのxamlで

<toolkit:MultiselectList ItemsSource="{Binding AllColors}">

そしてあなたの移入コードで

MultiselectList list = /* The list from your xaml */;
foreach (ColorModel model in allModels) {
    ColorViewModel viewModel = new ColorViewModel(model);
    if (shouldBeSelected(model)) {
        list.SelectedItems.Add(viewModel);
    }
    AllColors.Add(viewModel);
}
于 2012-08-30T14:07:34.107 に答える