5

FlipView を使用していくつかのアイテムを表示し、特定のアイテムの表示を開始したいと考えています。

このために、ビュー モデル クラスを定義しました。

class MyDataContext
{

    public MyDataContext()
    {
        Items = new List<MyClass>();
        Items.Add(new MyClass("1"));
        Items.Add(new MyClass("2"));
        Items.Add(new MyClass("3"));
        SelectedItem = Items[1];
    }

    public List<MyClass> Items { get; set; }
    public MyClass SelectedItem { get; set; }
}

ご覧のとおり、選択したアイテムは最初のアイテムではありません

XAML の場合:

    <FlipView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}"></FlipView>

ただし、アプリを実行すると、フリップ ビューには 2 番目のアイテムではなく、最初のアイテムが表示されます。

これは意図的なものですか、それともバグですか?

4

4 に答える 4

10

これを試して

<FlipView
    ItemsSource="{Binding Items}"
    SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
  • 値はコントロールとビュー モデルの両方によって設定されるため、SelectedItem が機能するには TwoWay バインディングである必要があります。
于 2012-05-04T18:12:29.650 に答える
5

FlipView で同じ問題が発生し、BindableBase または TwoWay オプションを機能させることができませんでした。リストの順序は私にとって実際のトピックではなかったので、ItemsSource を並べ替えるメソッドを作成し、SelectedItem をコレクションの最初の項目として開始しました。

基になるコードでは、結果は以前の List 要素ではなく、FlipView の新しい ItemsSource になります。

    public static List<T> ReorderList(List<T> elements, T selectedElement)
    {
        var elementIndex = elements.FindIndex(x => x.Id == selectedElement.Id);
        var result = new List<T>();

        foreach (var item in elements)
        {
            if (elementIndex .Equals(elements.Count))
            {
                elementIndex = 0;
            }

            result.Add(elements[elementIndex]);

            elementIndex++;
        }

        return result;
    }
于 2013-05-24T12:19:30.667 に答える
1

Filipが述べたことに加えて、クラス(MyDataContext)は、プロパティが変更されたことをUIに通知する必要があります。ViewModelはINotifyPropertyChangedを実装する必要があり、プロパティはPropertyChangedイベントを発生させる必要があります

public class ViewModel : INotifyPropertyChanged
{
    private object _selectedItem;

    public object SelectedItem
    {
        get { return _selectedItem; }
        set 
        { 
            _selectedItem = value; 
            OnPropertyChanged("SelectedItem"); 
        }
    }
}

サンプルアプリに付属のBindableBaseクラスを使用することもできます

public class ViewModel : BindableBase
{
    private object _selectedItem;

    public object SelectedItem
    {
        get { return this._selectedItem; }
        set { this.SetProperty(ref this._selectedItem, value); }
    }
}
于 2012-08-23T14:02:05.013 に答える