我基本上想要在一個集合中取一堆名字並將它們綁定到一個組合框。例如:如何將字符串的「列表」綁定到WPF中的組合框?
- 比爾
- 傑克
- 鮑勃
- 凱文
,並有收集這些物品,並把它綁定到ComboBox。我不確定列表是否會動態更新,但我更喜歡計劃它。任何幫助,將不勝感激。我一直在嘗試幾個小時,但無法弄清楚。我想在XAML中做,而不是代碼隱藏。在代碼隱藏中,
MyComboBox.ItemsSource = MyObservableCollection;
工作正常。我不知道如何在XAML中做到這一點,儘管在代碼隱藏中聲明瞭集合。
再次感謝(再次)社區。
*編輯:
這是多麼我已經收集聲明和訪問。
public ObservableCollection<string> propertynames
{
get {return _propertynames;}
}
private ObservableCollection<string> _propertynames;
我想的最後一件事是這樣的:
<Window.Resources>
<CollectionViewSource Source="{Binding propertynames}" x:Key="srcSort"/>
</Window.Resources>
....
<ComboBox x:Name="cboSort" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="256" Background="WhiteSmoke" Margin="12,50,0,0" FontSize="12pt"
Height="27.28"
SelectedIndex="0"
SelectionChanged="cboWorkCenters_SelectionChanged"
ItemsSource="{Binding Path = {StaticResource srcSort}}">
</ComboBox>
....
我總的n00b這種東西。現在已經有一週左右的時間了,所以我可能對一位經驗豐富的用戶做了一些非常明顯的事情。
*編輯#2
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:WpfApplication1"
Title="Window1" Height="226" Width="242"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ComboBox Margin="43,71,40,77"
Name="comboBox1"
ItemsSource="{Binding ob}" />
</Grid>
</Window>
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public ObservableCollection<string> ob
{
get
{
return _ob;
}
}
private ObservableCollection<string> _ob = new ObservableCollection<string>();
public Window1()
{
InitializeComponent();
FillObj();
//comboBox1.ItemsSource = ob;
}
private void FillObj()
{
for (int i = 1; i < 6; i++)
{
_ob.Add(i.ToString());
}
}
}
}
上述製造真正簡單的項目只是爲了看看,如果我做這一切是錯誤的。這工作得很好,所以別的東西一定會導致它失敗。
*編輯#3 *問題修正
看在上帝的份上,我想通了。我一直在這個小時,它只是愚蠢的是什麼導致它失敗。
解決方案是這樣的:當我聲明它時,我沒有實例化_propertynames。我正在用Linq查詢類屬性以獲取屬性列表,然後通過將......ProProperties.ToList < ...>()傳遞給構造函數來創建_propertynames。顯然,你必須實例化這個變量,使它在InitializeComponent期間命中。虛幻。 一旦我這樣做,然後在事後添加項目,它工作正常。
我希望WPF有一張臉,所以我可以打它。我知道這是我對它如何工作的無知,但我真的可以使用某種信息。
謝謝你們的幫助。一旦我處理了根本問題,這兩個建議都很有用。
private ObservableCollection<string> _propertynames
必須
private ObservableCollection<string> _propertynames = new ObservableCollection<string>()
它應該工作,如果窗口的datacontext設置爲它自己(把「this.Datacontext = this;」在窗口的構造函數內)。 – Adrian