我是MVVM的新手并且仍然试图掌握它,所以如果我设置错误请告诉我。我所拥有的是一个带有ListView的UserControl。我使用ViewModel中的数据填充此ListView,然后将控件添加到我的MainView。在我的MainView上,我有一个按钮,我想用它来向ListView添加项目。这就是我所拥有的:
模型
public class Item
{
public string Name { get; set; }
public Item(string name)
{
Name = name;
}
}
视图模型
public class ViewModel : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
private ObservableCollection<Item> _itemCollection;
public ViewModel()
{
ItemCollection = new ObservableCollection<Item>()
{
new Item("One"),
new Item("Two"),
new Item("Three"),
new Item("Four"),
new Item("Five"),
new Item("Six"),
new Item("Seven")
};
}
public ObservableCollection<Item> ItemCollection
{
get
{
return _itemCollection;
}
set
{
_itemCollection = value;
OnPropertyChanged("ItemCollection");
}
}
}
查看(XAML)
<UserControl.Resources>
<DataTemplate x:Key="ItemTemplate">
<StackPanel Orientation="Vertical">
<Label Content="{Binding Name}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<UserControl.DataContext>
<local:ViewModel />
</UserControl.DataContext>
<Grid>
<ListView ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemCollection}">
</ListView>
</Grid>
主窗口
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.mainContentControl.Content = new ListControl();
}
private void Button_Add(object sender, RoutedEventArgs e)
{
}
}
MainWindow(XAML)
<Grid>
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<Button Width="100" Height="30" Content="Add" Click="Button_Add" />
</StackPanel>
<ContentControl x:Name="mainContentControl" />
</DockPanel>
</Grid>
现在,根据我的理解,我应该只能将一个项目添加到ItemCollection中,它将在视图中更新。我如何从Button_Add事件中执行此操作?
同样,如果我这样做,那就错了,让我知道并指出我正确的方向。感谢
答案 0 :(得分:2)
您不应直接与控件进行交互。
您需要做的是定义一个Command(一个实现ICommand接口的类)并在ViewModel上定义此命令。
然后将Button的command属性绑定到ViewModel的this属性。在ViewModel中,您可以执行命令并将项目直接添加到列表中(因此listview将通过自动数据绑定进行更新)。
此链接应提供更多信息:
http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx#sec11