【发布时间】:2010-05-01 12:09:48
【问题描述】:
我有包含以下列的数据表:
id、名称、描述、ParentId
并希望创建一个 WPF 控件(.NET 4.0 框架),该控件实现了一个组合框,该组合框显示绑定到 id 值的名称。因此,当用户选择组合框中显示的名称时,后面的逻辑必须检索其 id 值。
如果有人能展示上述方法,我将不胜感激。
【问题讨论】:
-
您不需要为此创建控件...
标签: wpf data-binding
我有包含以下列的数据表:
id、名称、描述、ParentId
并希望创建一个 WPF 控件(.NET 4.0 框架),该控件实现了一个组合框,该组合框显示绑定到 id 值的名称。因此,当用户选择组合框中显示的名称时,后面的逻辑必须检索其 id 值。
如果有人能展示上述方法,我将不胜感激。
【问题讨论】:
标签: wpf data-binding
像这样:
在您的 XAML 文件中,输入:
<ComboBox x:Name="myComboBox" DisplayMemberPath="Name" SelectedValuePath="id" />
在你的代码后面,放:
myComboBox.ItemsSource = myTable;
(myTable 是对您提到的表格的引用)
然后你可以使用表达式在组合框中到达当前选择的人的id:
NameComboBox.SelectedValue
【讨论】:
MVVM模式解决方案
XAML:
<ComboBox
x:Name="myComboBox"
DisplayMemberPath="Name"
SelectedValuePath="id"
ItemsSource="{Binding myDataTable}"
SelectedValue="{Binding theID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
>
“Name”和“id”是 myDataTable 中的列。
后面的代码:
private MyViewModel _myViewModel = new MyViewModel();
this.DataContext = _myViewModel;
MyViewModel 类
public DataTable myDataTable { get; set; }
public short theID { get; set; }
“id”列下的选定值(行)被分配给“theID”。
【讨论】:
private void InitCountry()
{
BasicData basicData = new DAL.BasicData();
DataTable CountryListDT = basicData.GetCountryList();
txtCountry.SelectedIndex = 0;
txtCountry.ItemsSource = CountryListDT.DefaultView;
}
private void txtCountry_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
BasicData basicData = new DAL.BasicData();
object obj = (object)e.AddedItems;
Int32 CountId = (Int32)txtCountry.SelectedValue;
InitProvince(CountId);
}
【讨论】:
我的 XAML:
<ComboBox Margin="10,0,0,0" x:Name="listStatus"
HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="200" SelectionChanged="listStatus_SelectionChanged"
DisplayMemberPath="Status" SelectedValuePath="StatusID" />
背后的代码:
private void Bind_StatusList()
{
Service1 serv = new Service1();
dtStatus = serv.GetStatuses(); // a WCF service getting the DataTable from a view from the database.
listStatus.ItemsSource = dtStatus.DefaultView;
}
当窗口启动时,这并没有给出一个选定的选项,但是当我点击组合框时,至少会显示状态列表。
【讨论】: