Listview绑定问题
本文关键字:问题 绑定 Listview | 更新日期: 2023-09-27 17:59:59
我有以下类:
class MyViewModel
{
public List<MyItem> MyItems { get; set; }
public int Width { get; set; }
}
class MyItem
{
public string Name {get; set;}
}
正如您所看到的,在同一个名为MyViewModel的类中有一个MyItems和Width属性的列表。如何将该列表的单个元素绑定到XAML中的Text属性,并将Width from ViewModel绑定到XAML的Width属性?这是我的尝试,但我不能同时绑定这两个属性。我的意思是,我可以将整个列表绑定到Text属性,但我不知道如何绑定单个项。
<ListView ItemsSource="{Binding MyViewModel}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="15" Width="520">
<TextBlock Width="{Binding Width}" Text="{Binding=MyItems.Name(?)}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
你应该修改你的设计,但这里有一个快速的解决方案:只需引入一个只读属性,它返回第一个元素,所以你会得到这个(假设MyItems总是有至少一个元素,否则你会得到一个异常):
class MyViewModel
{
public List<MyItem> MyItems { get; set; }
public int Width { get; set; }
public MyItem FirstElement { get { return MyItems[0]; } }
}
在xaml中,您将TextBlock
绑定到此属性:
<ListView ItemsSource="{Binding MyViewModel}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="15" Width="520">
<TextBlock Width="{Binding Width}" Text="{Binding=FirstElement}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
有点偏离主题,但仍然很重要:视图模型类通常实现INotifyPropertyChanged
,这样视图就能够自动更新自己。出于同样的原因,应将List<T>
替换为ObservableCollection<T>
。