1

FlipView の SelectedIndex をプログラムで変更したいと考えています。私のViewModelは次のようになります:

public class MyViewModel : ViewModelBase {
   private int _flipViewIndex;

   public int FlipViewIndex
   {
      get { return _flipViewIndex; }
      private set { Set(ref _flipViewIndex, value); }
   }

   private string _logText;

   public string LogText
   {
      get { return _logText; }
      private set { Set(ref _logText, value); }
   }

   public async void Log(string text)
   {
      CoreDispatcher dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;
      if (dispatcher.HasThreadAccess)
      {
         LogText += text + "\n";
      }
      else
      {
         await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => Log(text));
      }
   }

   public async void SetIndex(int index)
   {
      CoreDispatcher dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;
      if (dispatcher.HasThreadAccess)
      {
         FlipViewIndex = index;
      }
      else
      {
         await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => SetIndex(index));
      }
   }
}

Set()上げINotifyPropertyChanged.PropertyChanged()ます。

私の XAML は次のようになります。

<views:BaseView>
 <Grid DataContext="{StaticResource ViewModel}">
  <FlipView SelectedIndex="{Binding FlipViewIndex}">
    <Control1 />
    <Control2 />
    <Control3 />
   </FlipView>
   <TextBlock Text="{Binding LogText}" />
  </Grid>
</views.BaseView>

View と ViewModel が正しくバインドされているように見えます。コントローラーから呼び出すとViewModel.Log("foo")、TextBlock のテキストが更新されて変更が反映されます。

問題は、私が呼び出すとViewModel.SetIndex(n)、FlipViewSelectedIndexが に更新されずn、0 のままになることです。なぜこれが起こっているのでしょうか?

4

1 に答える 1