好吧我不明白爲什麼WPF無法顯示組合框項目的「顯示成員」,但可以執行「選定值」。奇怪的是,我可以明確地創建顯示成員,但不能恢復。在我的示例中,我簡化了將使用ADO.NET來填充項目源的真實世界示例,但概念是相同的。我正在生成一個在運行時從sql語句生成的組合框。我想獲得一件事物的價值,但要顯示別的東西。是否有一些額外的綁定或定製我缺少或只是錯誤的成員的.NET?我只想讓'顯示...'選擇回來。如果這似乎不可能有點奇怪。當我選擇'價值'時,所有我回來,所以我知道在轉移中丟失了一些東西。Combobox不能正確顯示「顯示成員」?
任何想法?
XAML:
<Window x:Class="WPFComboBoxTest.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">
<StackPanel>
<ComboBox x:Name="cmb" Width="100" Height="50"/>
<TextBlock Height="100"/>
<Button x:Name="btn" Content="Click" Click="btn_Click" Width="50"/>
</StackPanel>
C#代碼背後:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
namespace WPFComboBoxTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
BindComboBox(cmb);
}
public void BindComboBox(ComboBox cbx)
{
DataTable dt = new DataTable();
dt.Columns.Add("Value", typeof(string));
dt.Columns.Add("Id", typeof(int));
dt.Rows.Add("Display of One", 1);
dt.Rows.Add("Display of Two", 2);
dt.Rows.Add("Display of Three", 3);
dt.Rows.Add("Display of Four", 4);
cbx.ItemsSource = dt.DefaultView;
cbx.DisplayMemberPath = dt.Columns["Value"].ToString();
cbx.SelectedValuePath = dt.Columns["Id"].ToString();
}
private void btn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Selected Value works: " + cmb.SelectedValue
+ "\n\nSelect Display does not though?: " + cmb.DisplayMemberPath
);
}
}
}
(facepalm)它非常簡單。 cmb.DisplayMemberPath需要是cmb.Text。 「文本」是我需要顯示向用戶顯示的顯示成員的屬性。 – djangojazz 2012-08-14 21:53:00