我正在尝试将 ListView 项与不在模型中的数据绑定(bind)。我有这样的模型-
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 绑定(bind)不起作用。
最佳答案
无需额外的 C# 代码即可实现的简单方法是 ...
- 在 DataTemplate 之外放置一个虚拟 UI 元素(在本例中为 ListView.Resources 中的一个 Button)并让它绑定(bind) ButtonVisibility。
- 在 DataTemplate 中,通过使用 ElementName 指定绑定(bind)源来绑定(bind)其可见性。
.
<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,请在 Page 类中定义您自己的 MyVisibility DependencyProperty 或其他内容。并类似地绑定(bind)它。
关于c# - 如何将 ListView 项与 UWP 模型外部的数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61255553/