不绑定MVVM中的View

本文关键字:View 中的 MVVM 绑定 | 更新日期: 2023-09-27 18:14:18

On HomePage.xaml

 <Page.DataContext>
    <ViewModel:GetTweetVM/>
</Page.DataContext>
Listview

<!--Content-->
    <ListView x:Name="lstHome"
                             Grid.Row="2"
                             Margin="5"
                             ItemInvoked="lstHome_ItemInvoked"
                             ContainerContentChanging="lstHome_ContainerContentChanging" ItemsSource="{Binding statusList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="auto"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="auto"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Image x:Name="imgThumbnailUser" Source="{Binding}"></Image>
                    <StackPanel Orientation="Vertical" Grid.Column="1">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock x:Name="txtName" Text="{Binding Text}"></TextBlock>
                            <TextBlock x:Name="txtUsername" Text="{Binding User.Name}" Foreground="#CCCCCC"></TextBlock>
                        </StackPanel>
                        <TextBlock x:Name="txtContentMessage" Text="{Binding User.Categories.Name}" TextTrimming="CharacterEllipsis" Foreground="#CCCCCC"></TextBlock>
                    </StackPanel>
                    <TextBlock x:Name="txtDateTime" Text="{Binding}" Foreground="#CCCCCC"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </control:ListView>
在GetTweetVM

 public class GetTweetVM
{
    TwitterContext twitter;
    public List<Status> statusList { get; set; }
    public GetTweetVM()
    {
        statusList = new List<Status>();
        if (SharedState.Authorizer != null)
        {
            twitter = new TwitterContext(SharedState.Authorizer);
            GetTweet();
        }
        else
            return;
    }
    public async void GetTweet()
    {
        //base.GetTweet();
        var objectStatus = await (from status in twitter.Status
                            where status.Type == LinqToTwitter.StatusType.Home && status.Count==10
                            select status).ToListAsync();
        foreach(var item in objectStatus)
        {
            statusList.Add(item);
        }
        string t = statusList[0].Text;
    }
}

结果:

  1. 字符串t将从statusList->"fadsvs..........获取值"
  2. Listview没有数据

我不知道哪里错了?

不绑定MVVM中的View

如果我理解正确的话,你有从ViewModel到View的通知问题

尝试下面

public ObservableCollection<Status> statusList { get; set; }

ObservableCollection将确保在添加任何项时通知UI。

关于ObservableCollection的更多信息

.net中ObservableCollection的作用是什么?

绝对应该替换:

public List<Status> statusList { get; set; }  

:

public ObservableCollection<Status> statusList { get; set; }

当你使用MVVM和数据绑定时,你应该使用ObservableCollection,这样你就可以在列表更改时获得UI通知。注意,当list中的一些对象属性只改变了list本身(元素被添加/删除或移动到list中)时,UI通知不会被触发。这是因为ObservableCollection触发事件只有当集合被改变而不是对象属性在列表中。

希望有所帮助