0

私はMVVMを初めて使用し、まだ理解しようとしているので、設定が間違っている場合はお知らせください。私が持っているのは、ListView を含む UserControl です。この ListView に ViewModel からのデータを入力し、コントロールを 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 でこのコマンドを定義する必要があります。

次に、ボタンのコマンド プロパティを ViewModel のこのプロパティにバインドします。その後、ViewModel でコマンドを実行し、アイテムをリストに直接追加できます (したがって、リストビューは自動データバインディングによって更新されます)。

このリンクは、より多くの情報を提供する必要があります:

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

于 2013-04-17T22:35:18.227 に答える