【问题标题】:Binding multiple sources in listview在列表视图中绑定多个源
【发布时间】:2015-04-12 07:47:41
【问题描述】:

我正在尝试使用 WINRT 学习 XAML,但我有一个关于绑定和视图模型的问题。

我有两个类 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。用户现在可以在 ListView 中选择/取消选择单个员工。

为了实现这一点,我创建了一个 DownloadableItem 类,它充当绑定到我的 listview 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 已经绑定到我的自定义 View Model 类 DownloadableItemVM 并正确显示每个员工的姓名和照片。

但是现在我遇到了一个问题,因为我需要将 My ListView 中的每个选定项目“绑定”回 DownloadableEmployee.IsSelected,这样当用户选择员工时,他们的“IsSelected”设置为 true,反之亦然。 .

我该怎么做呢?

【问题讨论】:

    标签: xaml windows-runtime winrt-xaml


    【解决方案1】:

    为什么不把所有的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 道具。这适合你吗?

    【讨论】:

    • 谢谢,这是个好主意!在我的 ListView 中,我将如何将我的 SelectedItem 绑定到 {Binding Employee.IsSelected} ?
    • 为您的 ListViewItem 编写样式并在 setter 中绑定:
    • 在这里的语法中挣扎:(在 我有 你是这个意思吗?
    • 是的,但是如果你想从你的视图模型中设置 IsSelected,你应该使用 TwoWay 绑定模式。
    • 作为测试,我将 IsSelected 属性设置为始终为“True”,并且我没有看到任何列表项被选中...我没有将 ItemContainerStyle 放在正确的位置吗? 什么是调试问题的好方法?非常感谢您帮助 Nazar!
    猜你喜欢
    • 2011-08-28
    • 2018-08-11
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多