不要绑定到MVVM中的View?

时间:2016-10-23 00:48:52

标签: c# xaml uwp win-universal-app

在HomePage.xaml

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

列表视图

<!--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. string t将从statusList-&gt;&#34; fadsvs ..........&#34;
  2. 获取价值
  3. 在xaml上,它不绑定到视图。
  4. Listview没有数据。
  5. 我不知道哪里出错了?请帮我解决。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您会从ViewModel到View

发出通知问题

尝试以下

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

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

有关ObservableCollection的更多信息

What is the use of ObservableCollection in .net?

希望这有帮助。

答案 1 :(得分:0)

当然你应该替换:

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

使用:

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

当您使用MVVM和数据绑定时,您应该使用ObservableCollection,以便在更改列表时获得UI通知。请注意,当列表中的某些对象属性仅更改了列表本身(已在列表中添加/删除或移动元素)时,将不会触发UI通知。这是因为ObservableCollection仅在未更改集合时触发事件,而在列表中触发对象属性。

希望有所帮助