0

私は2つのビューモデルを持っています.最初のビューモデルにはリストボックスがあります:

<ListBox x:Name="MainMenu" toolkits:TiltEffect.IsTiltEnabled="True" 
 SelectedItem="{Binding SelectedItem, Mode=TwoWay}" 
 ItemTemplate="{StaticResource MainMenu}" 
 ItemsSource="{Binding Categories}" Margin="0,97,0,0" 
 Tap="MainMenu_Tap">

2番目のページには、リストピッカーがあります

<toolkit:ListPicker Margin="0,153,0,0" Background="{StaticResource PhoneAccentBrush}" VerticalAlignment="Top"
 ItemsSource="{Binding Categories}"
 SelectedItem="{Binding Item}"
 ItemTemplate="{StaticResource CategorySelector}"
 FullModeHeader="Category" 
 FullModeItemTemplate="{StaticResource FullCategorySelector}"
 BorderBrush="{StaticResource PhoneAccentBrush}"/>

私が欲しいのは、2番目のページに移動すると、最初のページで選択されたアイテムが2番目のページで選択されることです。しかし、2番目のページに移動すると、選択したアイテムを常に有効な値に設定する必要があります。

最初のビューモデル

private CategoryModel _selectedItem = null;
public CategoryModel SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (_selectedItem == value)
        {
            return;
        }

        var oldValue = _selectedItem;
        _selectedItem = value;

        RaisePropertyChanged("SelectedItem", oldValue, value, true);
    }
}

2番目のビューモデル

private CategoryModel _item = null;
public CategoryModel Item
{
    get { return _item; }
    set
    {
        if (_item == value)
        {
            return;
        }

        var oldValue = _item;
        _item = value;

        // Update bindings, no broadcast
        RaisePropertyChanged("Item");
    }
}

ここに画像の説明を入力

編集

2 ページ目のリストピッカーを Listbox に変更すると、かなりうまく機能します。

ここにリンクの説明を入力してください。このことをリストピッカーで機能させるにはどうすればよいですか?

4

2 に答える 2

0

ビューとビューモデルを混同していると思います。

選択したアイテムを XAML でバインドしているため、XAML が解析されてページが作成されると、まだ作成されていないコレクション内のアイテムにバインドしようとします。これが、バグに関するコメントが、コード ビハインドでこれを設定する際の回避策を示唆している理由です。

最初のページのTapハンドラーで、選択した項目の詳細を 2 番目のページに渡していると仮定します。したがって、選択した項目の XAML バインドを削除OnNavigatedToし、2 ページ目のイベント ハンドラーで、ItemsSource が設定されていることがわかったら、コードでバインドを設定できます。

または、2 つのページで同じビューモデル インスタンスを共有することを検討することもできます。

于 2013-03-07T16:29:07.560 に答える