【发布时间】:2016-09-28 15:00:32
【问题描述】:
首先让我为这个可能有点模糊的标题道歉,我很难解释我的问题!也许这就是为什么我几乎没有得到任何谷歌结果的原因,这篇文章最接近我的问题(我认为):How to bind to a property of the ViewModel from within a GridView
无论如何,我有一个动态生成的新闻文章列表。用户可以选择按下“星号”按钮以将文章添加到他/她的收藏夹列表中。因此,这个“星”按钮应该只在用户登录时可见。
我试图通过在我的 ViewModel 中将 Button 的 Visibility 设置为一个名为 IsLoggedIn 的属性来实现这一点。但是,因为这发生在我的 ListView 中,所以它试图在 Article 中而不是 ViewModel 中找到属性 IsLoggedIn。
所以我想我的问题归结为:如何绑定到 Databound ListView 内的 ViewModel 属性?
<ListView ItemsSource="{x:Bind VM.Articles, Mode=OneWay}" ItemClick="DebuggableListView_ItemClick" IsItemClickEnabled="True" SelectionMode="None" Grid.Row="1" VerticalAlignment="Top">
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Article">
<Grid Margin="0,10,10,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Image}" Margin="0,0,10,0" Grid.Column="0" VerticalAlignment="Top" ImageFailed="Image_ImageFailed"/>
<Button Visibility="{x:Bind VM.IsLoggedIn, Converter={StaticResource BooleanToVisibilityConverter}, Mode=OneWay}" FontFamily="Segoe MDL2 Assets" Content="" FontSize="30" Background="Transparent" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>
<StackPanel Grid.Column="1">
<TextBlock TextWrapping="Wrap" FontWeight="Bold" Text="{Binding Title}"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Summary}"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
请求的文章类别:
public sealed class Article
{
public int Id { get; set; }
public int Feed { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime PublishDate { get; set; }
public string Image { get; set; }
public string Url { get; set; }
public string[] Related { get; set; }
public Category[] Categories { get; set; }
public bool IsLiked { get; set; }
}
好的,所以目前我通过拥有一个获取我的 VM 的单例的属性来使其工作,但是我确信必须有一种更简洁的方法来让像这样简单的东西工作。我添加了一个示例 rar(OneDrive 链接:https://1drv.ms/u/s!Ar4fOTiwmGYnyWbwRY6rM0eFsL9x),其中包含一个列表、一个 ViewModel、一些虚拟数据和 VM 内的 Visibility 属性。如果您可以在没有我肮脏的方法的情况下使其正常工作,请随时提交作为答案。
【问题讨论】:
-
你看this answer了吗?
-
你能用
ArticlesClass更新你的问题吗 -
@EdPlunkett 我猜您指的是该答案中的最后一段代码?试图让那部分在我的案例 atm 中工作。
-
@AVKNaidu 我添加了 Article 类,认为模型没有多大帮助。
-
是的,我这里没有用于编译 UWP 项目的设置,但我认为他是说您应该能够在代码隐藏中将 DataContext 公开为
VM属性并使用x:Bind你有绑定——除非我误解了。