我的wpf项目遵循MVVM模式。在我的视图模型中,我有一个IList的obejcts,我从数据库中获取。此IList中的每个对象都有一个List属性。
当我打开该视图模型的视图时,我有一个带有此属性的ItemsControl:
ItemsSource="{Binding TheIListOfObjects}"
并且ItemsControl中的项目实际上显示了List中的信息。
因此,当用户在视图上时,会显示一个itemscontrol。我想要做的是:在同一视图中,如果用户单击按钮,则更改列表。如何让ItemsControl刷新并显示新信息?
答案 0 :(得分:0)
您需要拥有的是属性类型的ObservableCollection类型。
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel>
<Button Content="Click" Click="Button_Click" />
<ListView ItemsSource="{Binding People}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private ObservableCollection<Person> _people = new ObservableCollection<Person>();
public ObservableCollection<Person> People
{
get { return _people; }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
People.Add(new Person { Name = "A" });
}
}
public class Person
{
public string Name { get; set; }
}
答案 1 :(得分:0)
要确保将集合中的更改通知其绑定控件,您必须使用ObservableCollection<>
而不是IList<>
答案 2 :(得分:0)
在WPF中,一旦我们将数据绑定到集合控件的ItemsSource
属性,我们就不刷新ItemsSource
属性,或者进行交互以任何其他方式与它。相反,我们使用数据绑定属性值,因此对于您的示例...:
ItemsSource="{Binding TheIListOfObjects}"
...你应该操纵TheIListOfObjects
集合:
TheIListOfObjects = GetNewCollectionItems();
如果您在视图模型中正确实现了INotifyPropertyChanged
界面,那么您的视图应该按预期更新。