ObservableCollection绑定到comboBox

时间:2014-02-18 13:08:59

标签: c# wpf observablecollection

我创建了ObservableCollection:

public ObservableCollection<Tool> toolList = new ObservableCollection<Tool>();

我在构造函数中设置了DataContext:

public MainWindow()
    {           
       InitializeComponent();
       DataContext = toolList;           
    }

实际:

    public MainWindow()
    {

       InitializeComponent();
       DataContext = this;

    }

公开名单:

    public ObservableCollection<Tool> ToolList
   {
       get { return toolList; }
   }

如何将对象添加到列表中:

    private void buttonAdd_Click(object sender, RoutedEventArgs e)
    {
        InputDialog input = new InputDialog();
        input.ShowDialog();
        inputNewTool = input.enteredTxt;

        if (inputNewTool != null)
        {
            System.Windows.Forms.MessageBox.Show("Chose the Tool's directory");
            dlg.DefaultExt = ".exe";
            dlg.Filter = "Application (.exe)|*.exe";

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Tool tool = new Tool();
                tool.Name = inputNewTool;
                tool.Path = dlg.FileName;
                toolList.Add(tool);
            }                
       }            
     }

我希望在comboBox上只显示Toolobject的名称。 XAML:

 <ComboBox ItemsSource="{Binding Path= ToolList}" DisplayMemberPath="Name" 
 SelectedValuePath ="Name" SelectedValue="{Binding Path=ToolList}" Height="22" 
 Name="comboBoxTools" Width="185" IsEditable="False" />

编辑:现在xaml显示:

   <ComboBox ItemsSource="{Binding Path= ToolList, 
   UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name"

Toolclass:

 public class Tool
{
    public   string Name { get; set; }
    public   string Path { get; set; }

   public Tool() { }
}

我在comboBox中看不到任何内容。为什么?这些工具成功添加到Collection中。 我生气了

3 个答案:

答案 0 :(得分:3)

您已将Window的DataContext设置为ObservableCollection本身。

因此,{em>绑定ItemsSource与DataContext本身,因为Binding将自动指向List实例。

<ComboBox ItemsSource="{Binding}"/>

OR

理想情况下,您应该将DataContext设置为自身:

DataContext = this;

此外,SelectedValue仅指向列表。这没有任何意义。如果不使用SelectedValuePath,它应该指向类工具的实例。如果使用SelectedValuePath,它应该指向string类型的属性。

完全删除它或在课堂上将其设置为正确的实例。

答案 1 :(得分:0)

尝试在您的ItemsSource-Binding中将UpdateSourceTrigger设置为PropertyChanged

答案 2 :(得分:0)

好的,我在youtube上找到了一个简单的解决方案(来自ht195367的Windows Presenation Foundation数据绑定)。我没有在Xaml中定义comboBox.ItemsSource,而是在Window_Loaded中定义。

comboBoxTools.ItemsSource = toolList;

为了显示我在工具类中实现ToStringng的工具的名称:

public override string ToString()
{
        return Name;

}