4

だから私は、いくつかのデータを defaultViewModel に設定する Windows 8 アプリを持っています。私の質問は、ページが作成された後、データに何かを追加した後、ページを更新して変更を表示するにはどうすればよいですか?

    protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {            
        //inital load
        var DataGroups = SampleDataSource.GetGroups((String)navigationParameter);
        this.DefaultViewModel["Items"] = DataGroups;           
    }
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        //when the page is navigated back to after making changes to sampledatasource
        base.OnNavigatedTo(e);
        this.DefaultViewModel.Clear();
        var DataGroups = SampleDataSource.GetGroups("AllGroups");
        this.DefaultViewModel["Items"] = DataGroups;           
    }

行った変更は、次にアプリケーションを開いてページをリロードするまで反映されません。ビューモデルは次のとおりです。

    protected IObservableMap<String, Object> DefaultViewModel
    {
        get
        {
            return this.GetValue(DefaultViewModelProperty) as IObservableMap<String, Object>;
        }

        set
        {
            this.SetValue(DefaultViewModelProperty, value);
        }
    }

これは、更新したいリスト ビューです。

<ListView
    x:Name="itemListView"
    AutomationProperties.AutomationId="ItemsListView"
    AutomationProperties.Name="Items"
    TabIndex="1"
    Grid.Row="1"
    Visibility="Collapsed"
    Margin="0,-10,0,0"
    Padding="10,0,0,60"
    ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
    ItemTemplate="{StaticResource Standard80ItemTemplate}"
    SelectionMode="None"
    IsSwipeEnabled="false"
    IsItemClickEnabled="True"
    ItemClick="ItemView_ItemClick"/>

これにバインド:

<CollectionViewSource
    x:Name="itemsViewSource"
    Source="{Binding Items}"
    d:Source="{Binding AllGroups[0].Items, Source={d:DesignInstance Type=data:SampleDataSource, IsDesignTimeCreatable=True}}"/>

msdn 関数:

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

2 に答える 2

3

テンプレート (空のアプリ テンプレートを除く) を使用する場合、通常は Windows 8 ストア プロジェクトの Common フォルダーに作成される BindableBase クラス コードを確認してください。開始点が空のアプリ テンプレートである場合は、新しい BasicPage を作成できます。Visual Studio は、共通ファイルを含めるかどうかを尋ねます。

基本的に、アイデアは次のようになります。

  1. INotifyPropertyChanged インターフェイスを実装します
  2. カスタム PropertyChanged イベントを作成する
  3. プロパティに新しい値を設定した時点で、 this.OnPropertyChanged(propertyName) を呼び出し、そのプロパティの変更イベントを発行します。プロパティが変更されたことがコントロールに通知され、新しい値で自動的に更新されます。
于 2012-10-06T07:47:59.250 に答える
1

これが私のアプローチです:

public bool Reload()
{
    if (!this.Frame.BackStack.Any())
        return false;
    var current = this.Frame.BackStack.First();
    this.Frame.BackStack.Remove(current);
    return this.Frame.Navigate(current.SourcePageType, current.Parameter);
}

頑張ってください!

于 2014-02-21T22:04:19.077 に答える