[英]WPF Databinding with a ComboBox
我正在嘗試使用Entity Framework學習WPF數據綁定。 我已經在鏈接中實現了教程
而且效果很好。 我正在嘗試自己插入一個組合框,我想將其綁定到類別的名稱。 但是我做不到。 這是我的嘗試:在XAML文件上:
<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" Binding="{Binding Name}" />
和代碼隱藏:
ComboCategory.ItemSource = _context.Categories.Local.ToList();
你能告訴我我在想什么嗎? 謝謝。
您在這里缺少DisplayMemberpath屬性
<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" DisplayMemberPath = "Name" />
完全使用ItemSource
是完全有效的。 我建議您使用Data Binding
。 這是MSDN的一個很好的定義:
數據綁定是在應用程序UI和業務邏輯之間建立連接的過程。 如果綁定具有正確的設置,並且數據提供了正確的通知,則當數據更改其值時,綁定到數據的元素會自動反映更改。 數據綁定還可以意味着,如果元素中數據的外部表示發生更改,則基礎數據可以自動更新以反映更改。 例如,如果用戶編輯TextBox元素中的值,則基礎數據值將自動更新以反映該更改。
我已經回答了一個問題,即有人在將項目綁定到ListBox時也遇到了問題。 這不是ComboBox,但原理是相同的。 點擊這里去的問題,並在這里直接進入到了答案。
基本上可以歸結為:
在下面的代碼中,我根據教程中使用的屬性對屬性進行了一些更改。
XAML:
<ListBox Margin="20" ItemsSource="{Binding Products}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=ProductId}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
C#
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class ProductViewModel
{
public List<Product> Products
{
get
{
return new List<Product>
{
new Product{ ProductId = 1, Name = "Product_1" },
new Product{ ProductId = 2, Name = "Product_2" }
};
}
}
}
//Following code can be placed in the Loaded event of the page:
DataContext = new ProductViewModel();
當我在XAML中使用它時,它起作用了:
<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" DisplayMemberPath = "Name" ItemsSource="{Binding}" />
無法相信,請檢查鏈接
問題是Item 的 Source(復數)而不是ItemSource(單數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.