2014-02-27 14 views
0

請看看下面的圖片:綁定組合框這是在列表框到的ViewModels財產(S)

enter image description here

只有三個ListBox中的項目顯示在上面的圖片,但它可以是任何數量的項目取決於用戶的選擇。現在

,你可以每個項目上面的圖片中看到有兩個組合框。現在我想在我的viewModel中有selectedItemSelectedValue,我應該可以從中獲得用戶的選擇。現在我不知道如何綁定這些組合框來獲取用戶的選擇。

假設我只有一個項目,而不是列表,然後我將宣佈一個int類型的屬性,這樣我可以輕鬆地獲得了selectedValue但對於名單我非常困惑。任何人都可以指出我正確的方向嗎?

+0

是什麼XAML中是什麼樣子?你的模型是什麼樣的。記住你的ViewModel應該是你View的模型。因此,我認爲你的觀點爲對象A. 列表現在對象a包含一個單位名單(包括下拉列表共享相同的列表)一個UnitSelected和AlertnateUnitSelected財產。每個下拉列表綁定到它們各自選定的屬性。 – Rhyous

+0

在上面的評論中你提到了'UnitSelected'和'AlternateUnitSelected'屬性應該在viewmodel中定義。我同意這一點。但是上面列表中的項目將被用戶添加或刪除,所以我不知道列表中的項目數量。那麼,如何決定我必須爲UnitSelected定義多少個屬性,如第一個ListItem的UnitSelected1,第二個ListItem的UnitSelected2等....? – Vishal

+1

你剛剛用「List」回答了你自己的問題。你需要有一個名單 SelectedUnits。然後,爲您的父列表框的xaml模板將包括它自己的子列表框。 – Rhyous

回答

1

要開始的,可以說你將要綁定組合框類是

public class UnitSource :INotifyPropertyChanged 
{ 
    public IEnumerable Units 
    { 
     get { return new[] { "Test Unit", "Alternate Unit" }; } 
    } 

    string _selectedComboItem1; 
    public string SelectedComboItem1 
    { 
     get 
     { 
      return _selectedComboItem1; 
     } 

     set 
     { 
      if (_selectedComboItem1 == value) 
       return; 
      _selectedComboItem1 = value; 
      OnPropertyChanged(); 
     } 
    } 

    string _selectedComboItem2; 
    public string SelectedComboItem2 
    { 
     get 
     { 
      return _selectedComboItem2; 
     } 

     set 
     { 
      if (_selectedComboItem2 == value) 
       return; 
      _selectedComboItem2 = value; 
      OnPropertyChanged(); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

然後在您的視圖模型,你將有UnitSource的像一個ObservableCollection下面

public ObservableCollection<UnitSource> MuchoUnitSources 
    { 
     get; set; 
    } 

爲了得到所選的ListBoxItem在你的ViewModel中有這個

private UnitSource _selectedUnitSource; 
    public UnitSource SelectedUnitSource 
    { 
     get 
     { 
      return _selectedUnitSource; 
     } 
     set 
     { 
      if (_selectedUnitSource == value) 
       return; 
      _selectedUnitSource = value; 
      OnPropertyChanged(); 
     } 

    } 

讓我們假設它被初始化像這樣

MuchoUnitSources = new ObservableCollection<UnitSource>(new []{ new UnitSource(),new UnitSource() }); 

的在你看來你的列表框應該如下

<ListBox Name ="TestList1" ItemsSource="{Binding MuchoUnitSources}" SelectedItem="{Binding SelectedUnitSource}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <ComboBox SelectedItem="{Binding SelectedComboItem1}" ItemsSource="{Binding Units}" /> 
        <ComboBox SelectedItem="{Binding SelectedComboItem2}" ItemsSource="{Binding Units}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

    </ListBox> 

現在,每當你從任何他們將更新綁定到objectbeing組合框的選擇項目。

+0

我已經完成了與上面描述的完全相同的事情。現在我的問題是:假設我有5個'ListItems'。因此,我將有5個ComboBoxes for Units和5 ComboBoxes for AlternateUnits。現在,我將有5個「SelectedUnits」和5個「SelectedAlternateUnits」。但在視圖模型中,SelectedUnits和SelectedAlternateUnits的數據類型是根據您的答案字符串。那麼一個字符串如何保存多個'SelectedItems'? – Vishal

+1

它不一定是字符串,我可以使用一個對象。這裏的想法是,每個列表框項目綁定到一個單元源,選定的組合框項綁定到該單元源中的一個屬性。在一個單位源中選擇更新單位來源的屬性。根據我的知識,Comboboxes不允許多個項目選擇。 – TYY

+0

我想你是誤解了我,或者可能是我誤解了你。一個組合框只能有一個項目選擇,但有多個組合框,所以會有多個選定的項目。 – Vishal