【问题标题】:WPF Binding Collection To ComboBox and Selecting an itemWPF 将集合绑定到 ComboBox 并选择一个项目
【发布时间】:2010-09-23 13:45:13
【问题描述】:

一段时间以来,我一直在反对这个问题。我不确定为什么它不起作用。我对整个 WPF 业务还是很陌生。

这是我的组合框 XAML

<ComboBox 
    SelectedValuePath="Type.FullName"
    SelectedItem="{Binding Path=Type}"
    Name="cmoBox" />

这是填充 ComboBox 的内容(myAssembly 是我使用可能类型列表创建的一个类)

cmoBox.ItemsSource = myAssembly.PossibleTypes;

我在后面的代码中将 DataContext 设置在 ComboBox 的父元素中,如下所示:

groupBox.DataContext = listBox.SelectedItem;

我希望绑定从组合框中选择正确的“可能类型”。它不选择任何东西。我已经尝试过 SelectedValue 和 SelectedItem。当我将 ComboBox 的 DisplayMemberPath 更改为不同的属性时,它改变了显示的内容,所以我知道它并没有完全损坏。

有什么想法吗???

【问题讨论】:

    标签: .net wpf data-binding combobox


    【解决方案1】:

    在 XAML 中,设置 ItemsSource="{Binding}" 并(在后面的代码中)将 DataContext 设置为 myAssembly.PossibleTypes

    【讨论】:

    • :) 我没有测试它...但是我最近已经进入 WPF 很多(由于在工作中使用它)...我认为这要么 100% 正确,或离开。
    【解决方案2】:

    您还可以在 xaml 中而不是在代码隐藏中设置绑定(我们尽可能避免在 xaml 页面中隐藏代码)。我假设 myAssembly 是控件的代码隐藏属性,并且是 MyAssembly 类的实例...

    <UserControl 
      x:Class="MyNamespace.MyControl"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      DataContext="{Binding}">
    
      <ComboBox 
        Width="200" 
        ItemsSource="{Binding Path=myAssembly.PossibleTypes}"
        SelectedValuePath="Type.FullName"  
        SelectedItem="{Binding Path=Type}" 
        Name="cmoBox" />
    </UserControl>
    

    这可能只是个人喜好,但我认为在 xaml 中进行数据绑定是更好的做法,因为这样可以更轻松地查看每个控件绑定的内容,而无需浏览代码隐藏。此外,如果您想在代码中引用您的 ComboBox,您应该在 xaml 中为其分配一个 x:Name 属性,而不仅仅是 Name。

    【讨论】:

      【解决方案3】:

      我同意:绑定应该在 XAML 中。我把...检查..在后面的代码中根本没有,永远。数据源都是可重复使用的“资源”。

      (好吧,代码隐藏构造函数调用 InitializeComponent())。

      【讨论】:

      • 您根本没有回答这个问题。除了不使用代码的不相关偏好之外,您什么都没有添加。此外,在您发布“答案”之前的 18 个月,该问题已得到正确回答。由于这些原因,-1.
      猜你喜欢
      • 2012-01-27
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2011-01-10
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多