我们假设您有
在模型中。整数绑定到视图中的ComboBox。
Q1)如何将数组(或数组的各个项)绑定到DataGrid或ListView控件,以便:
即。如果我在ComboBox中选择5,则只能看到5行,其中包含5个TextBox,每个TextBox都绑定到数组的前5个项目。
Q2)您如何向DataGrid / ListView提供另一列(仅文本信息),以便:
非常感谢任何帮助或建议 谢谢。
编辑(22.11.2013):
根据{{3}}的建议,我将Sheridan与我的另一个问题相关联,该问题包含更多有关此问题的信息(和背景信息)。
最初,我打开了这个问题,因为我认为只有简单的机制才能解决任何背景问题会更好地理解并有更好的机会得到回答。
我的立场得到了纠正。
答案 0 :(得分:1)
好的,所以如果你要正确地做到这一点,你首先需要创建一个数据类型/模型类来保存你的数据。它应该正确实现INotifyPropertyChanged
interface,并为要在DataGrid
中显示的每个列包含一个属性,包括一个额外的“Q2”要求。
接下来,您要将两个类型为ObservableCollection<YourDataType>
的属性添加到/ view模型后面的代码中。第一个将保存整个集合,第二个将显示您想要的行数。您还需要一个integer
属性Bind
来ComboBox
的所选项目:
<DataGrid ItemsSource="{Binding FilteredItems}" ... />
...
<ComboBox ItemsSource="{Binding Numbers}" SelectedItem="{Binding SelectedItem}" />
现在,只要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
方法中,我们只根据Items
值从整个SelectedItem
集合中获取相关数量的项目。由于FilteredItems
集合绑定到DataGrid.ItemsSource
,因此UI将自动更新。