【问题标题】:How do I include an 'all items' item in a ListView?如何在 ListView 中包含“所有项目”项目?
【发布时间】:2012-07-05 11:10:15
【问题描述】:

我有一个窗口显示餐厅/商店特定时间之间的销售额。当用户选择要查询的时间段时,它会显示该时间段之间的销售数据。我还在以编程方式创建一个用户列表,然后可以选择该列表来过滤查询。例如,我选择“Michael”用户,然后使用该用户显示归因于他的所有销售(在之前选择的时间范围内)。

创建用户的ListView 相当容易,但我试图在此列表中附加一个内容为“所有用户”的项目。然后将其传递回查询,然后查询将通过某些属性(UserId = 999 或其他。不重要)识别此用户,以再次使用所有用户的数据填充页面。

现在我必须退出页面并返回执行此操作。不是很优雅!

我打算将 ViewModel 中的 User 对象附加到从数据库 EF 生成的列表中,但它创建了一个 IUsers 列表,因此我无法实例化它的实际实例(也许我在这里非常愚蠢,并且缺少一些基本的东西?)。

对于实现这一目标的任何帮助将不胜感激。

【问题讨论】:

  • 我们需要一些代码,文本太多了。
  • 来吧,不要害羞。告诉我们你做了什么?

标签: c# .net wpf xaml listview


【解决方案1】:

您的 UI 通常会创建一个封装底层用户信息的视图模型。然后,您将拥有这些视图模型的集合,视图绑定到这些视图模型。假设你有这个,向这个集合添加一个哨兵实例是一件简单的事情。它可能看起来像这样:

// this is your DAL class
public class User
{
}

// a view model to wrap the DAL class    
public class UserViewModel
{
    // a special instance of the view model to represent all users
    public static readonly UserViewModel AllUsers = new UserViewModel(null);
    private readonly User user;

    public UserViewModel(User user)
    {
        ...
    }

    // view binds to this to display user
    public string Name
    {
        get { return this.user == null ? "<<All>>" : this.user.Name; }
    }
}

public class MainViewModel()
{
    private readonly ICollection<UserViewModel> users;

    public MainViewModel()
    {
        this.users = ...;
        this.users.Add(UserViewModel.AllUsers);
    }

    public ICollection<UserViewModel> Users
    {
        ...
    }
}

在构建查询的代码中,您需要做的就是检查用户视图模型中的用户是否存在。如果没有,则无需将任何用户选择附加到查询中。

【讨论】:

    【解决方案2】:

    您可以尝试使用CompositeCollection 设置您的ItemSourceListBox -

    <ListBox> 
        <ListBox.ItemsSource> 
            <CompositeCollection> 
                <CollectionContainer Collection="{Binding YourCollection}" /> 
                <ListBoxItem Foreground="Magenta">Select All</ListBoxItem> 
            </CompositeCollection> 
        </ListBox.ItemsSource> 
    </ListBox> 
    

    但是您必须应用一些解决方法(例如使用 BindingProxy)来使 Binding 工作,因为 CollectionContainer 不支持绑定,请参阅这些链接 -

    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/637b563f-8f2f-4af3-a7aa-5d96b719d5fd/

    How do you bind a CollectionContainer to a collection in a view model?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多