0

我正在尝试将 ViewModel 中的 List 绑定到 Page 中的 ListView ,但我无法让它工作,尽管列表中填充了值,但 ItemsSource 始终为空。

这就是我设置整个事情的方式。

这些属性被添加到我的 xaml 中的页面标记中

xmlns:viewmodels ="using:TimeMachine3.ViewModels"
d:DataContext="{d:DesignInstance viewmodels:MasterViewModel}"

我的 ListView 定义为

<ListView x:Name="lstMainMaster" ItemsSource="{Binding MyList}" SelectionChanged="lstMainMaster_SelectionChanged">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{x:Bind Name}"/>
                    <TextBlock Text="{x:Bind Number}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

在我的 master.cs (页面代码)中,我有

    private ViewModels.MasterViewModel viewmodel;

    //constructor
    public master()
    {
        this.InitializeComponent();
        this.Loaded += Master_Loaded;
    }

    private void Master_Loaded(object sender, RoutedEventArgs e)
    {
        viewmodel = new ViewModels.MasterViewModel();
        viewmodel.populate();
    }

在 masterViewmodel (页面的视图模型)我有这个代码

    private ObservableCollection<Month> _myList;
    public ObservableCollection<Month> MyList{ get {return _myList; } }

    public void Populate()
    {
        _myList = new ObservableCollection<Month>(DataBase.GetMonths(2017));
    }
4

2 回答 2

1

它是空的,因为您在加载视图之后更改了指向的引用MyList并且不通知视图更改(通过INotifyPropertyChanged)。因此,视图不知道它需要刷新绑定。

public void Populate()
{
    _myList = new ObservableCollection<Month>(DataBase.GetMonths(2017));
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyList)));
}

或同等学历。

于 2017-05-12T11:21:04.450 回答
0

我刚刚意识到,如果我的 DataContext 设置正确,我不必实现 InotifyChanged 接口。

我改变了数据上下文的设置方式

xmlns:viewmodels ="using:TimeMachine3.ViewModels"
enter code here`d:DataContext="{d:DesignInstance viewmodels:MasterViewModel}"

<Page
...
xmlns:viewmodels ="using:TimeMachine3.ViewModels"
.../>
<Page.DataContext>
   <viewmodels:MasterViewModel>
</Page.DataContext>

现在 itemssource 将在调用 InitializeComponent() 之后立即设置,如果我的列表被更改,那么我的 ListView 将更新而无需添加更多代码(我什至不必实现 INotifyChanged)

于 2017-05-19T09:45:44.210 回答