2014-05-06 64 views
0

這裏是我的組合框:如何將數據庫表中的屬性綁定到組合框WPF?

<ComboBox 
       HorizontalAlignment="Left" 
       Margin="125,110,0,0" 
       VerticalAlignment="Top" 
       Width="120" 
       SelectedValue="{Binding LotNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       ItemsSource="{Binding LotNumber}" 
       RenderTransformOrigin="0.583,2" Height="18" /> 

這裏是我的屬性LotNumber:

private string lotNumber; 
public string LotNumber 
    { 
     get 
     { 
      return lotNumber; 
     } 
     set 
     { 
      lotNumber = value; 
      RaisePropertyChanged("LotNumber"); 
     } 
    } 

眼下批號屬性是我lotInformation桌子底下。

E.g. (類的摘錄,類有另一個屬性)

public class LotInformation 
{ 
    [XmlAttribute("lot_number")] 
    public string lot_number { get; set; } 

}

所以,我dbset是:

public DbSet<LotInformation> LotInformation {get;set;} 

的組合框的結合是空的。沒有任何東西被綁住......我不知道爲什麼。我應該使用ComboBox_Loaded嗎?

基本上,我只想顯示數據庫中當前存在的所有批號。

+1

如果你想綁定到批號,你的ItemsSource需要是字符串(批號)的集合。您應該使用MVVM並將ViewModel綁定到您的視圖。該視圖將由您的ViewModel的DataTemplate組成,幷包含上述代碼。 – NielW

+0

所以,我是(至少我認爲)使用MVVM。因此,在我的View中,讓我們說LotView,就是上面的XAML。在我的LotViewModel中,這是我擁有我的財產的地方。這可能與你所說的字符串集合有關,因爲奇怪的是,我能夠使用Text =「{Binding LotNumber}」(只有一個與用戶上傳的文件相關的數字)將一個LotNumber綁定到文本框,但是我無法將批號綁定到組合框。這可能是因爲我需要從一開始就將它加載到視圖上? –

回答

2

要綁定ItemsSourceLotNumber,這是一個字符串。 ItemsSource的預期值是要在下拉列表中顯示的對象的集合。

由於string不是「對象集合」,因此您的綁定可能失敗。

你想要做的是創建可用值的集合(使用List<string>如果您的收藏是靜態的,或者ObservableCollection<string>如果集合是動態的,可以在運行時改變),並綁定你ItemsSource屬性設置爲

<ComboBox ItemsSource="{Binding AllAvailableLotNumbers}" 
      SelectedItem="{Binding LotNumber}" /> 
+0

所以我必須從已經存儲在數據庫中的值創建一個列表,並隨着數據增長不斷更新列表?讓我解釋我如何獲取這些數據。用戶正在上傳反序列化的Xml文件,lot_number僅僅是每次有人上傳新的xml數據文件時發生的字符串。在我的班級中,我應該將其改爲列表還是將其保留爲字符串?現在,我創建了一個新的批號列表屬性,但它是空的,這就是爲什麼當我綁定到列表和特定項目時,什麼都不會發生。 –

+0

@KalaJ如果您的數據庫包含應顯示在ComboBox中的所有可用批號的列表,那麼您將希望檢索該信息,並將其存儲在'List '(或'ObservableCollection ',如果用戶可以更新列表,而程序正在運行),並將可用值的集合綁定到'ItemsSource'屬性。 'ItemsSource'屬性指定在ComboBox下拉菜單中有哪些項目可用,而SelectedItem是選中列表中的項目。 – Rachel

+0

太棒了,謝謝!我得到了它的工作。我使用LINQ檢索數據,然後將其添加到列表中。我在下面結合了您的解決方案和rajibdotnet的解決方案。我想知道雖然SelectedItem和DisplayMemberPath之間有什麼區別?我改用了DisplayMemberPath。謝謝! :D –

1

ItemsSource是IEnumerable類型的,因此您需要將它傳遞給lotInformation表(某種LotNumbers的集合)。爲了結合你需要設置的屬性如下所示: -

<ComboBox    
DisplayMemberPath="LotNumber" 
ItemsSource="{Binding lotInformation }"/> 
+0

如果我按照類似的方式,我得到這個錯誤:System.Windows.Data錯誤:40:BindingExpression路徑錯誤:'對象''LotViewModel'(HashCode = 25277429)'找不到'LotInformation'屬性。 BindingExpression:路徑= LotInformation; DataItem ='LotViewModel'(HashCode = 25277429);目標元素是'ComboBox'(Name ='');目標屬性是'ItemsSource'(鍵入'IEnumerable') –

+0

由於錯誤說你需要創建這個屬性LotInformation。它可以是ObservableCollection或List類型。嘗試複製代碼中提供的示例,並逐漸替換您的要求。 http://msdn.microsoft.com/en-us/library/ms748365(v=vs.110).aspx – rajibdotnet

相關問題