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 のままになることです。なぜこれが起こっているのでしょうか?