Есть несколько способов сделать это.Основы - это то, что вам нужно, чтобы XAML мог видеть вашу коллекцию.Вы можете сделать это неявным образом, установив его в свой DataContext.Если это единственное, что вы связываете, то это быстрый и грязный способ связывания.Это выглядело бы так:
public partial class MainWindow : Window
{
public ObservableCollection<Directory> DirectoryList;
public MainWindow()
{
InitializeComponent();
DirectoryList = new ObservableCollection<Directory>();
Directory _dirtemp = new Directory();
_dirtemp.IKey = "1";
_dirtemp.IValue = "Steve";
DirectoryList.Add(_dirtemp);
_dirtemp = new Directory();
_dirtemp.IKey = "2";
_dirtemp.IValue = "John";
DirectoryList.Add(_dirtemp);
DataContext=DirectoryList;
}
}
Window x:Class="DataBindCombo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataBindCombo"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox Height="48" HorizontalAlignment="Left" Margin="70,104,0,0" Name="comboBox1" VerticalAlignment="Top" Width="310"
ItemsSource="{Binding}"
DisplayMemberPath="IValue"
SelectedValuePath="IKey"
>
Другой способ более сложный, но, вероятно, вы будете использовать его чаще.Для этого вам нужно представить свою коллекцию в вашем MainWindow как DependencyProperty, а затем привязать к этому значению.Это выглядело бы примерно так:
public partial class MainWindow : Window
{
public static DependencyProperty DirectoryListProperty =
DependencyProperty.Register("DirectoryList",
typeof(ObservableCollection<Directory>),
typeof(MainWindow));
public MainWindow()
{
InitializeComponent();
}
public ObservableCollection<Directory> DirectoryList
{
get { return (ObservableCollection<Directory>)base.GetValue(DirectoryListProperty); }
set { base.SetValue(DirectoryListProperty, value); }
}
}
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" x:Name="mainWindow">
<Grid>
<ComboBox Height="48" HorizontalAlignment="Left" Margin="70,104,0,0" Name="comboBox1" VerticalAlignment="Top" Width="310"
ItemsSource=" {Binding ElementName=mainWindow, Path=DirectoryList}"
DisplayMemberPath="IValue"
SelectedValuePath="IKey"
/>
Это также не единственный способ сделать это таким образом.В целом, вместо создания списка непосредственно в элементе управления, вы должны создать модель представления.Шаблон MVVM является рекомендуемым способом создания вашей презентации, но мои примеры дают вам возможность получить функциональность там.Вы можете играть и экспериментировать с различными способами сделать это.Я обнаружил, что всегда есть несколько способов сделать что-то в WPF, и нужно найти тот, который лучше всего подходит для ситуации.