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>

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

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

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 作为 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;
    }
于 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 回答
0

它看起来像一个错误。如果您调试您的代码,您会注意到,首先您的SelectedItemin VM 设置为正确的元素,然后设置为,然后设置null为 FlipView 的 ItemsSource 集合的第一个元素。

作为一种解决方法,我看到在引发 FlipView 的 Loaded 事件后设置 VM 的 SelectedItem。

于 2016-06-27T13:09:54.070 回答