簡體   English   中英

WPF DataGrid / ListView綁定到數組mvvm

[英]WPF DataGrid / ListView bind to array mvvm

假設您有

  • N個整數的數組
  • 代表行數的整數值

在模型中。 整數綁定到視圖中的ComboBox。

Q1)如何將數組(或數組的單個項綁定到DataGrid或ListView控件,以便:

  • 當您更改ComboBox值時,在DataGrid或ListView中僅可見/生成了許多行
  • DataGrid或ListView的各行包含允許編輯數組中相應值的TextBox(或類似文本)。 綁定必須是雙向的。

即,如果我在ComboBox中選擇5,則只有5行可見,其中包含5個TextBox,每個TextBox綁定到數組的前5個項目。

Q2)您將如何向DataGrid / ListView提供另一列(僅文本信息),以便:

  • 第一行的讀數始終為0。每個隨后的行的讀數為:“上一行” +“ 360除以ComboBox選定值”(為簡單起見,它限制為偶數)。

任何幫助或建議都非常感謝。
謝謝。

編輯(22.11.2013):
根據謝里丹(Sheridan)的建議,我將此問題與我的其他問題相關聯, 該問題具有與此問題更多的信息(和上下文)。

最初,我提出這個問題是因為我認為,將問題從任何上下文中剝離出來,僅針對裸露的機械手,都會更好地理解並且有更好的機會被回答。
我站得住了。

好的,因此,如果您要正確執行此操作,則首先需要創建一個數據類型/模型類來保存數據。 它應該正確實現INotifyPropertyChanged接口 ,並為每個要在DataGrid顯示的列包含一個屬性, 其中包括一個額外的“ Q2”要求

接下來,您要將ObservableCollection<YourDataType>類型的兩個屬性添加到您的代碼后面/視圖模型中。 第一個將保存整個集合,第二個將僅顯示所需的行數。 您還需要一個integer屬性來BindComboBox的選定項:

<DataGrid ItemsSource="{Binding FilteredItems}" ... />
...
<ComboBox ItemsSource="{Binding Numbers}" SelectedItem="{Binding SelectedItem}" />

現在,只要ViewModel中的SelectedItem屬性發生變化,您只需要更新FilteredItems屬性中的項目行數即可:

public int SelectedItem
{
    get { return selectedItem; }
    set
    {
        selectedItem = value;
        NotifyPropertyChanged("SelectedItem");
        UpdateFilteredItems();
    }
}
...
private void UpdateFilteredItems()
{
    FilteredItems = 
        new ObservableCollection<YourDataType>(Items.Take(SelectedItem));
}

UpdateFilteredItems方法中,我們僅基於SelectedItem值從整個Items集合中獲取相關項目數。 由於FilteredItems集合綁定到DataGrid.ItemsSource ,因此UI將自動更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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