Как связать элемент ListView с данными вне модели в UWP? - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь связать элемент представления списка с данными, которых нет в модели. У меня есть такая модель:

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;

И код, который я попробовал, выглядит следующим образом:

<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>

Здесь привязка ButtonVisibility не работает.

1 Ответ

2 голосов
/ 17 апреля 2020

Простой способ добиться этого без дополнительного C# кода - это ...

  1. Поместить фиктивный элемент пользовательского интерфейса за пределы DataTemplate (в этом примере - это кнопка в ListView.Resources) и позволить это связать ButtonVisibility.
  2. В DataTemplate свяжите его Visibility, указав источник привязки с ElementName.

.

<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>

Если вам не нравится использовать дополнительный UIElement, определите свой собственный MyVisibility DependencyProperty или что-то в классе Page. И связать это аналогично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...