首页 文章

WPF绑定集合到ComboBox并选择一个项目

提问于
浏览
8

我已经在一段时间内对抗这个问题了 . 我不确定为什么它不起作用 . 我对这整个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更改为其他属性时,它更改了显示的内容,因此我知道它并未完全破坏 .

有任何想法吗???

3 回答

  • 12

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

  • 11

    您也可以在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 .

  • -5

    我同意:绑定应该在XAML中 . 我把......检查......后面的代码什么都没有 . 数据源都是可重用的“资源” .

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

相关问题