[英]WPF DataGrid / ListView bind to array mvvm
假設您有
在模型中。 整數綁定到視圖中的ComboBox。
Q1)如何將數組(或數組的單個項)綁定到DataGrid或ListView控件,以便:
即,如果我在ComboBox中選擇5,則只有5行可見,其中包含5個TextBox,每個TextBox綁定到數組的前5個項目。
Q2)您將如何向DataGrid / ListView提供另一列(僅文本信息),以便:
任何幫助或建議都非常感謝。
謝謝。
編輯(22.11.2013):
根據謝里丹(Sheridan)的建議,我將此問題與我的其他問題相關聯, 該問題具有與此問題更多的信息(和上下文)。
最初,我提出這個問題是因為我認為,將問題從任何上下文中剝離出來,僅針對裸露的機械手,都會更好地理解並且有更好的機會被回答。
我站得住了。
好的,因此,如果您要正確執行此操作,則首先需要創建一個數據類型/模型類來保存數據。 它應該正確實現INotifyPropertyChanged
接口 ,並為每個要在DataGrid
顯示的列包含一個屬性, 其中包括一個額外的“ Q2”要求 。
接下來,您要將ObservableCollection<YourDataType>
類型的兩個屬性添加到您的代碼后面/視圖模型中。 第一個將保存整個集合,第二個將僅顯示所需的行數。 您還需要一個integer
屬性來Bind
到ComboBox
的選定項:
<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.