为什么FlipView会忽略SelectedItem

use*_*719 5 xaml windows-runtime winrt-xaml

我想使用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; }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,所选项目不是第一项.

现在为XAML:

    <FlipView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}"></FlipView>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,翻转视图显示第一个项目,而不是第二个项目.

这是故意的吗?还是一个错误?

Fil*_*kun 10

试试这个

<FlipView
    ItemsSource="{Binding Items}"
    SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
  • 您的SelectedItem需要是一个TwoWay绑定才能工作,因为该值由控件和视图模型设置.


Hut*_*wer 5

与FlipView有相同的问题,无法使BindableBase或TwoWay选项工作.因为列表的顺序对我来说不是一个主题,所以我创建了一个重新排序ItemsSource的方法,从SelectedItem开始,作为Collection中的第一个项目.

在底层代码中,结果是FlipView的新ItemsSource,而不是之前的List元素.

    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;
    }
Run Code Online (Sandbox Code Playgroud)