2

FlipView私のページには、うまく機能するデータバインドがあります。ページに2つのボタンがあり、FlipView前後に移動するために使用します。ボタンMouse Modeは、シミュレータで使用するとき、または実際にローカルマシンモードでマウスを使用するときに機能します。

しかし、「基本タッチモード」を使用するか、実際のタッチスクリーンでアプリを使用してボタンをタップすると、FlipViewは次のビューに移動しますが、点滅/反転します。

これが私のFlipViewです:

<FlipView x:Name="Flipper" ItemsSource="{Binding Path=Views}">...</FlipView>

そして私のボタン:

<Button x:Name="ForwardButton" IsEnabled="{Binding CanGoForward}" Style="{StaticResource ForwardButtonStyle}" Tapped="ForwardButton_OnTapped" />

そして私のイベント:

private void ForwardButton_OnTapped(object sender, TappedRoutedEventArgs e)
{
            if (Flipper.SelectedIndex >= Flipper.Items.Count - 1)
            {
                Flipper.SelectedIndex = 0;
            }
            else
            {
                Flipper.SelectedIndex++;
            }

            e.Handled = true;
 }

アップデート:

OnSelectionChangedFlipViewに追加すると、で2回ヒットするのがわかりますBasic touch modeが、 1回Mouse modeだけで、再びMouse mode期待どおりに機能します。

4

1 に答える 1

1

ええ、私はそれを次のように実装しました:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    ViewModel ViewModel { get { return this.DataContext as ViewModel; } }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        this.ViewModel.MovePrevious();
    }

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        this.ViewModel.MoveNext();
    }
}

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel() { SelectedThing = ThingList.First(); }

    List<int> m_ThingList = Enumerable.Range(1, 50).ToList();
    public List<int> ThingList { get { return m_ThingList; } set { SetProperty(ref m_ThingList, value); } }

    int m_SelectedThing = default(int);
    public int SelectedThing { get { return m_SelectedThing; } set { SetProperty(ref m_SelectedThing, value); } }

    internal void MovePrevious()
    {
        var _CurrentIndex = ThingList.IndexOf(this.SelectedThing);
        try { SelectedThing = ThingList[--_CurrentIndex]; }
        catch { SelectedThing = ThingList.First(); }
    }

    internal void MoveNext()
    {
        var _CurrentIndex = ThingList.IndexOf(this.SelectedThing);
        try { SelectedThing = ThingList[++_CurrentIndex]; }
        catch { SelectedThing = ThingList.Last(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    void SetProperty<T>(ref T storage, T value, [System.Runtime.CompilerServices.CallerMemberName] String propertyName = null)
    {
        if (!object.Equals(storage, value))
        {
            storage = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

<Page.DataContext>
    <local:ViewModel />
</Page.DataContext>

<Page.BottomAppBar>
    <AppBar>
        <Grid>
            <Button HorizontalAlignment="Left" Click="Button_Click_1">Previous</Button>
            <Button HorizontalAlignment="Right" Click="Button_Click_2">Next</Button>
        </Grid>
    </AppBar>
</Page.BottomAppBar>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <FlipView x:Name="MyFlip"
                ItemsSource="{Binding ThingList}"
                SelectedItem="{Binding SelectedThing,
                                        Mode=TwoWay}" />
</Grid>

まあ、それは正しく動作しました。再確認してもらえますか?または、より多くの情報を提供しますか?それ以外の場合は、ガイドとして私のものを使用して実装を更新することで、これを解決できる可能性があります。そうだといい。

実際には、DelegateCommandを使用してボタンを処理していました。しかし、ボイラープレートコードが多すぎて例をやり過ぎたくありませんでした。私が何をしたかを知りたい場合は、こちらをご覧ください:http: //blog.jerrynixon.com/2012/08/most-people-are-doing-mvvm-all-wrong.html

于 2013-03-04T21:34:21.937 に答える