【问题标题】:bind listbox to selected item将列表框绑定到所选项目
【发布时间】:2013-05-30 23:06:22
【问题描述】:

WP8、VS2012...我正在使用 msdn 本地数据库示例作为基础。

这是我目前的设置,那里有 75%...

我有 MainPage pivot > 列表框 AllItems 显示数据库中的所有当前项目:

XAML

    <ListBox
        SelectionChanged="OpenWinePage_Click"
        x:Name="allItemsListBox" 
        ItemsSource="{Binding AllItems}" 
        Margin="12,2,-20,-2" Width="440"
        ItemTemplate="{StaticResource WineListBoxItemTemplate}" />

我希望能够单击其中一个项目,即 Mark Ryan,并且只有该项目显示在详细信息页面中:

OpenWinePage_Click 后面的代码是:

    private void OpenWinePage_Click(object sender, EventArgs e)
     {
        // Capture selected item data
        _selectedItem = (sender as ListBox).SelectedItem;

        if (_selectedItem != null)
        {
            // Send ID of selected contact
            string dest = "/WinePage.xaml?toDoItemId=" + ((ToDoItem)_selectedItem).ToDoItemId;
            NavigationService.Navigate(new Uri(dest, UriKind.Relative));
        }
      }

当 WinePage.xaml 打开时,显示所选项目的 xaml 是:

          <ListBox
                    x:Name="WinePageDetails" 
                    Margin="12, 0, 12, 0" Width="440"
                    ItemsSource="{Binding AllItems}" <!--I DON'T KNOW WHAT TO BIND HERE TO ONLY SHOW SELECTED ITEM-->
                    ItemTemplate="{StaticResource WinePageListBoxItemTemplate}" />

所以我得到了详细信息页面中的所有项目,而不仅仅是选定的 1 个项目:

在我的 ToDoViewModel.cs 中,我尝试绑定以下内容?...

    // All items.
    private ObservableCollection<ToDoItem> _allItems;
    public ObservableCollection<ToDoItem> AllItems
    {
        get { return _allItems; }
        set
        {
            _allItems = value;
            NotifyPropertyChanged("AllItems");
        }
    }

    // To-do items associated with the red category.
    private ObservableCollection<ToDoItem> _redItems;
    public ObservableCollection<ToDoItem> RedItems
    {
        get { return _redItems; }
        set
        {
            _redItems = value;
            NotifyPropertyChanged("RedItems");
        }
    }...et al pivots

我是否需要创建另一个仅指向一个项目的可观察集合,以便我可以绑定到它?

这是一个绑定问题吗?数据库问题?如何在我的详细信息页面上只显示一个选定的项目?

非常感谢您的帮助!

R

【问题讨论】:

    标签: c# binding listbox


    【解决方案1】:

    您需要创建一个 NotifyPropertyChanged 属性,例如Public TodoItem SelectedTodo {...} 在调用 OpenWinePage_Click 时设置。然后,您可以简单地将该特定属性绑定到控件:例如&lt;TextBlock Text="{Binding SelectedTodo}"/&gt;

    【讨论】:

    • 非常感谢史蒂文的帮助
    • 对此非常陌生 :) 1. 所以即使我没有更新/编辑任何内容,我也会使用 NotifyPropertyChanged?我只是想在“详细信息”页面中查看该项目? 2. Public TodoItem SelectedTodo {...} 将进入 MainPage.xaml 的代码隐藏?或者我会将它放在 //AllItems 之前的 ToDoViewModel.cs 中(参见初始线程中的第 4 个代码示例)?此外,SelectedTodo 的 {...} 中会包含什么内容? 3. 我可以不使用 吗(参见初始线程中的第三个代码示例)?如您所见,使用 会更好吗?谢谢! R
    • 但是当您更改点击事件中的值时,您正在更新它。如果详情页是一个单独的类,最好放在这里,从主类中设置值。最后,您可以使用任何您想要的控件,但列表框只有在您有列表时才有意义:)。如果您只允许在详细信息页面中查看一个选定的项目,我会选择不同的控件,例如文本块。
    • '最好放在这里'...这里在哪里? :)
    • 在你正在使用的详情页的类中,你在哪里使用它。
    猜你喜欢
    • 2011-02-10
    • 2015-04-04
    • 2015-02-07
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2013-01-27
    • 2018-03-30
    • 2011-12-23
    相关资源
    最近更新 更多