如何将 ListView 项与 UWP 中模型外部的数据绑定?

Hab*_*man 3 c# xaml uwp

我正在尝试将列表视图项与不在模型中的数据绑定。我有这样的模型 -

public class Recording
{
        public string ArtistName { get; set; }
        public string CompositionName { get; set; }
        public DateTime ReleaseDateTime { get; set; }
}
public ObservableCollection<Recording> Recordings = new ObservableCollection<Recording>();
public Visibility ButtonVisibility = Visibilty.Collasped;
Run Code Online (Sandbox Code Playgroud)

我尝试过的代码如下所示:

<ListView ItemsSource="{x:Bind ViewModel.Recordings}"
HorizontalAlignment="Center" VerticalAlignment="Center">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:Recording">
            <Button Content="OK" Visibility="{Binding ButtonVisibility, Mode=OneWay}"/>
            <TextBlock Text="{Binding ArtistName, Mode=OneWay }"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

在这里,ButtonVisibility 绑定不起作用。

小智 6

无需额外 C# 代码即可实现此目的的简单方法是...

  1. 在 DataTemplate 外部放置一个虚拟 UI 元素(在本例中为 ListView.Resources 中的 Button),并让它绑定 ButtonVisibility。
  2. 在 DataTemplate 中,通过使用 ElementName 指定绑定源来绑定其 Visibility。

<ListView ItemsSource="{x:Bind ViewModel.Recordings}" HorizontalAlignment="Center" VerticalAlignment="Center">
    <ListView.Resources>
        <Button x:Name="RelayButtonVisibility" Visibility="{x:Bind ViewModel.ButtonVisibility, Mode=OneWay}"/>
    </ListView.Resources>
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:Recording">
            <StackPanel Orientation="Horizontal">
                <Button Content="OK" Visibility="{Binding Visibility, ElementName=RelayButtonVisibility}"/>
                <TextBlock Text="{Binding ArtistName, Mode=OneWay }"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢使用额外的 UIElement,请在 Page 类中定义您自己的 MyVisibility DependencyProperty 或其他内容。并以同样的方式绑定它。