0

我是 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)
    {

    }
}

主窗口 (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 事件执行此操作?

同样,如果我做错了,请告诉我并指出正确的方向。谢谢

4

1 回答 1

2

您不应直接与控件交互。

你需要做的是定义一个命令(一个实现 ICommand 接口的类)并在你的 ViewModel 上定义这个命令。

然后将 Button 的 command 属性绑定到 ViewModel 的此属性。在 ViewModel 中,您可以执行命令并将项目直接添加到列表中(因此列表视图将通过自动数据绑定得到更新)。

此链接应提供更多信息:

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx#sec11

于 2013-04-17T22:35:18.227 回答