2015-10-28 100 views
0

我開始學習WPF,我試圖用組合框工作,但到目前爲止我有麻煩。我想要的是將組合框的值設置爲基於項目表的主ID,並根據我的表的項目名稱列顯示組合框的文本。如何爲WPF中的組合框項目設置值?

我有一個PHP的背景,所以我嘗試編碼它有那麼你們能更好地理解我想要做的事:

<?php 

$con = mysqli_connect("localhost","root","","inventory"); 

echo "<form method='POST'>"; 
echo "<select name='value'>"; 
echo "<option>Select An Item</option>"; 

$item_query = mysqli_query($con,"SELECT * FROM item") or mysqli_error(); 
while($got = mysqli_fetch_assoc($item_query)) 
{ 
$item_id = $got['item_id']; 
$item_name = $got['item_name']; 
echo "<option value='$item_id'>$item_name</option>";  
} 

echo "</select>"; 
echo "<input type='submit' name='submit'/>"; 
echo "</form>"; 

if(isset($_POST['submit'])) 
{ 
    echo $_POST['value']; 
} 

?> 

我對WPF迄今所做的:

InitializeComponent(); 
     comboBox.Items.Add("One"); 
     comboBox.Items.Add("Two"); 
     comboBox.Items.Add("Three"); 

這是我迄今爲止唯一遺憾的事情。我甚至沒有將它連接到我的數據庫,因爲我首先想確定如何才能應用這些值,然後才能應用我的數據庫。

+0

您是否嘗試過在網絡上搜索上水木清華? http://www.wpf-tutorial.com/list-controls/combobox-control/ – Dennis

+0

我試過,到目前爲止我得到的是靜態方法(這是完全無用的),字典方法(沒有工作),創建使用mylistboxitem類的文本/值。我無法想象,沒有任何簡單的方法可以做到這一點,就像HTML處理值一樣簡單。但也許這很容易,因爲PHP和HTML可以在同一個腳本,PHP甚至可以回顯出一個HTML代碼。 –

回答

0

假設您還沒有MVVM模式的經驗,請在XAML和代碼隱藏文件中使用DataBinding。

  1. 在Window類上實現INotifyPropertyChanged接口。 INotify ...是在UI元素保存的數據在代碼後面更改時通知UI元素的關鍵接口。

你可以找到的代碼下面鏈接執行INotifyPropertyChanged:http://www.codeproject.com/Articles/41817/Implementing-INotifyPropertyChanged

  • 創建按照您的組合框的數據庫表結構對應的自定義類項目。也讓你的類實現INotifyPropertyChanged接口。強制性從屬性的setter調用OnPropertyChanged方法。下面的示例代碼:

    public class Item:InotifyPropertyChanged 
    { 
    private int id: 
    public int Id 
    { 
    get{return id;} 
    set 
    { 
        id=value; 
        OnPropertyChanged(new PropertyChangedEventArgs("Id")); 
    } 
    
    } 
    private string text; 
    public string Text 
    { 
        get { return text; } 
        set 
        { 
         text = value; 
         OnPropertyChanged(new PropertyChangedEventArgs("Id")); 
        } 
    } 
    

    3. 創建類型的ObservableCollection的容器屬性來保存的ComboBox項類窗口,如下所示:

    private ObservableCollection<Item> _items; 
    public ObservableCollection<Item> Items 
    { 
        get { return _items; } 
        set 
        { 
         _items = value; 
         OnPropertyChanged(new PropertyChangedEventArgs("Items")); 
    
        } 
    } 
    

    創建填充容器項目和呼叫的方法來自Window構造函數的代碼後面的方法。

  • 最後,如下更改XAML組合框的定義:

     <ComboBox ItemsSource="{Binding Items}" 
         DisplayMemberPath="Text" 
         SelectedValuePath="Id"/> 
    
  • 相關問題