簡體   English   中英

使用ComboBox的WPF數據綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM