おそらくやや曖昧なタイトルについて謝罪することから始めましょう。私は問題を説明するのに苦労しています!おそらく、私はこの記事が私の問題に最も近いという私の考えに最も近いGoogleの結果を得ることができないのではないでしょうか。(私は思う):とにかく、私は動的に生成されているニュース記事のリストを持っています。ユーザは、自分のお気に入りリストに記事を追加するために「スター」ボタンを押すという選択肢がある。したがって、この「スター」ボタンは、ユーザーがログインしているときにのみ表示する必要があります。これは、ボタンの可視性をViewModel内のIsLoggedInというプロパティに設定することで、これを達成しようとしています。しかし、これは私のListView内部で起こっているので、ViewModelの代わりに記事の中にIsLoggedInというプロパティーを見つけようとしています。ListViewのDataTypeの代わりにViewModelのバインディングを使用する方法?
私の質問は次のとおりです。データバインドされたリストビュー内の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のシングルトンを取得する特性を有することにより、作業それを得たので、現在、この作業のような単純なものを得るためのよりクリーンな方法。私はリスト、ViewModel、いくつかのダミーデータ、およびVM内のVisibilityプロパティを持つサンプルrar(OneDriveリンク:https://1drv.ms/u/s!Ar4fOTiwmGYnyWbwRY6rM0eFsL9x)を追加しました。あなたが私の汚い方法なしでそれを稼働させることができるならば、答えとしてコミットすることを自由に感じてください。
あなたは[この回答](http://stackoverflow.com/a/32862922/424129)を見ましたか? –
あなたの質問を 'Articles'クラスで更新できますか – AVK
@EdPlunkettその回答の最後のコードを参照していると思いますか?私の場合はatmで働いているその部分を取得しようとしています。 – anthonytimmers