在列表视图中绑定多个源
Binding multiple sources in listview
我正在尝试学习 XAML WINRT,我对绑定和视图模型有疑问。
我有两个 classes EmployeeList 和 DownloadableEmployee:
public sealed class EmployeeList
{
public IReadOnlyList<DownloadableEmployee> DownloadableEmployees { get; }
}
public sealed class DownloadableEmployee
{
public System.Boolean IsSelected { get; set; }
public System.String Name { get; }
//method
public IAsyncOperation<IRandomAccessStreamWithContentType> GetEmployeePicAsync();
}
我已将 EmployeeList 绑定到显示员工姓名和照片的 Multi Selectable ListView。用户现在可以 select / deselect ListView 中的个别员工。
为了实现这一点,我创建了一个 DownloadableItem class 作为绑定到我的列表视图 EmployeeLV 的 ViewModel。
public class DownloadableItemVM
{
public string Name
{
get;
private set;
}
public IRandomAccessStreamWithContentType EnmployeePic
{
get;
private set;
}
public DownloadableItem(string name, IRandomAccessStreamWithContentType thumbnail)
{
Name = name;
Thumbnail = thumbnail;
}
}
ObservableCollection<DownloadableItemVM> employeesToDownload = new ObservableCollection<DownloadableItemVM>();
// set source to ListView
EmployeeLV.ItemsSource = employeesToDownload;
foreach (DownloadableEmployee item in EmployeeList.DownloadableEmployees)
{
IRandomAccessStreamWithContentType stream = await item.GetEmployeePicAsync();
employeesToDownload.Add(new DownloadableItemVM(item.Name, stream));
}
我的列表视图
<ListView x:Name="employeeLV" SelectionMode="Multiple" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Thumbnail}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
提问XAML专家:
我的 ListView 已经绑定到我的自定义视图模型 class DownloadableItemVM 并正确显示每个员工的姓名和照片。
但现在我遇到了一个问题,因为我需要 "bind" My ListView 中的每个 selected 项目返回 DownloadableEmployee.IsSelected 这样当用户 select员工,他们的 "IsSelected" 被设置为 true,反之亦然,当他们 deselect.
我应该怎么做?
为什么不将所有 DownloadableEmployee 对象都放在 DownloadableItemVM 中,并通过该对象绑定到名称、图片等?例如
public class DownloadableItemVM
{
...
public DownloadableEmployee Employee
{
get;
private set;
}
...
public DownloadableItem(DownloadableEmployee employee, IRandomAccessStreamWithContentType thumbnail)
{
Employee= employee;
Thumbnail = thumbnail;
}
...
}
<ListView x:Name="employeeLV" SelectionMode="Multiple" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Thumbnail}"/>
<TextBlock Text="{Binding Employee.Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
使用这种方法,您可以通过 Employee 对象访问 IsSelected 道具。这适合你吗?
我正在尝试学习 XAML WINRT,我对绑定和视图模型有疑问。
我有两个 classes EmployeeList 和 DownloadableEmployee:
public sealed class EmployeeList
{
public IReadOnlyList<DownloadableEmployee> DownloadableEmployees { get; }
}
public sealed class DownloadableEmployee
{
public System.Boolean IsSelected { get; set; }
public System.String Name { get; }
//method
public IAsyncOperation<IRandomAccessStreamWithContentType> GetEmployeePicAsync();
}
我已将 EmployeeList 绑定到显示员工姓名和照片的 Multi Selectable ListView。用户现在可以 select / deselect ListView 中的个别员工。
为了实现这一点,我创建了一个 DownloadableItem class 作为绑定到我的列表视图 EmployeeLV 的 ViewModel。
public class DownloadableItemVM
{
public string Name
{
get;
private set;
}
public IRandomAccessStreamWithContentType EnmployeePic
{
get;
private set;
}
public DownloadableItem(string name, IRandomAccessStreamWithContentType thumbnail)
{
Name = name;
Thumbnail = thumbnail;
}
}
ObservableCollection<DownloadableItemVM> employeesToDownload = new ObservableCollection<DownloadableItemVM>();
// set source to ListView
EmployeeLV.ItemsSource = employeesToDownload;
foreach (DownloadableEmployee item in EmployeeList.DownloadableEmployees)
{
IRandomAccessStreamWithContentType stream = await item.GetEmployeePicAsync();
employeesToDownload.Add(new DownloadableItemVM(item.Name, stream));
}
我的列表视图
<ListView x:Name="employeeLV" SelectionMode="Multiple" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Thumbnail}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
提问XAML专家:
我的 ListView 已经绑定到我的自定义视图模型 class DownloadableItemVM 并正确显示每个员工的姓名和照片。
但现在我遇到了一个问题,因为我需要 "bind" My ListView 中的每个 selected 项目返回 DownloadableEmployee.IsSelected 这样当用户 select员工,他们的 "IsSelected" 被设置为 true,反之亦然,当他们 deselect.
我应该怎么做?
为什么不将所有 DownloadableEmployee 对象都放在 DownloadableItemVM 中,并通过该对象绑定到名称、图片等?例如
public class DownloadableItemVM
{
...
public DownloadableEmployee Employee
{
get;
private set;
}
...
public DownloadableItem(DownloadableEmployee employee, IRandomAccessStreamWithContentType thumbnail)
{
Employee= employee;
Thumbnail = thumbnail;
}
...
}
<ListView x:Name="employeeLV" SelectionMode="Multiple" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Thumbnail}"/>
<TextBlock Text="{Binding Employee.Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
使用这种方法,您可以通过 Employee 对象访问 IsSelected 道具。这适合你吗?