【问题标题】:How to get specific item listbox C# MVVM WPF如何获取特定项目列表框 C# MVVM WPF
【发布时间】:2020-06-25 22:14:09
【问题描述】:

您好,我尝试从列表框中获取特定项目。我尝试绑定但我崩溃了。使用 Prism 框架我如何绑定以从列表框中获取特定项目,我需要制作什么模板。这是测试代码:

<ListBox SelectedItem="{Binding SelectIndex}" HorizontalAlignment="Left" Height="297" Margin="57,41,0,0" VerticalAlignment="Top" Width="681">
                        <ListBoxItem>
                                <TextBlock Text="Test123"/>
                        </ListBoxItem>
                        <ListBoxItem>
                                <TextBlock Text="Test123"/>
                        </ListBoxItem>
                </ListBox>

C#代码:

public int SelectIndex
                {
                        get
                        {
                                return 1;
                        }
                }

如果我想要此列表中的特定项目,我该如何获取?绑定列表框选择项目需要什么变量类型?

【问题讨论】:

  • 如果您要发布测试代码,请发布完整代码。另外,请发布崩溃时遇到的异常。您没有向我们任何人提供足够的信息来帮助您。

标签: c# wpf mvvm


【解决方案1】:

它崩溃了,因为您在视图模型 (VM) 中将 SelectedItemobject 类型)绑定到您的 SelectIndex 属性(int 属性)。 ListBox 与许多 WPF 控件一样,具有不同的 SelectedIndexSelectedItem 属性用于绑定。

如果您想绑定到int 属性以获取索引,您应该绑定ListBoxSelectedIndex 属性。

变化:

<ListBox SelectedItem="{Binding SelectIndex}" ...

...到:

<ListBox SelectedIndex="{Binding SelectIndex}" ...

您的虚拟机仍为:

public int SelectIndex { get { return 1; } }

虽然更有用并允许用户选择不同的项目它应该是:

public int SelectIndex { get; set; } // TODO: add support for INotifyPropertyChanged

您可以选择添加:

    <ListBox SelectedIndex="{Binding SelectIndex}" 
             SelectedItem="{Binding SelectedItem}" ...

视图模型:

    public int SelectIndex { get; set; } // TODO: add support for INotifyPropertyChanged

    // replace object with your type
    public object SelectedItem { get; set; } // TODO: add support for INotifyPropertyChanged

【讨论】:

  • replace object with your type 是什么类型的?
  • @aepot 无论您的ListBox 显示的是什么。 String; Person; Hamster ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多