如何使用新项更新listView?

时间:2012-06-24 20:00:18

标签: wpf listview mvvm

我有2个字段

string Name

int Age

当用户按下listView时,如何将此信息添加到绑定到Button的集合?

1 个答案:

答案 0 :(得分:3)

这是一个简单的例子。它假定使用this文章中描述的RelayCommand和ObservableObject类。

MainWindow.xaml

                  

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="60*" />
        <RowDefinition Height="20*" />
        <RowDefinition Height="20*" />
    </Grid.RowDefinitions>

    <ListBox ItemsSource="{Binding People}"
             Margin="5">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Age}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <Grid Grid.Row="1">
        <Grid.RowDefinitions>
            <RowDefinition Height="50*" />
            <RowDefinition Height="50*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Label>Name:</Label>
        <Label Grid.Row="1">Age:</Label>

        <TextBox Grid.Column="1"
                 Margin="5"
                 Text="{Binding Name}"/>
        <TextBox Grid.Column="1"
                 Grid.Row="1"
                 Margin="5"
                 Text="{Binding Age}"/>

    </Grid>

    <Button Grid.Row="2"
            Margin="5"
            Command="{Binding AddPersonCommand}">Add Person</Button>

</Grid>

接下来,创建一个用于保存信息的简单类。

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

最后,创建一个简单的viewModel来操作信息。

public class AppViewModel : ObservableObject
{
    private int _age;
    private string _name;

    private RelayCommand _AddPersonCommand;

    private ObservableCollection<Person> _people = new ObservableCollection<Person>()
    {
        new Person { Name="Ben", Age=26 },
        new Person { Name="George", Age=40 },
        new Person { Name="Amy", Age=38 },
        new Person { Name="April", Age=22 },
        new Person { Name="Mick", Age=45 },
        new Person { Name="Steph", Age=32 },
        new Person { Name="Mel", Age=35 },
        new Person { Name="Emma", Age=28 },
    };

    public IEnumerable People
    {
        get { return _people; }
    }

    public ICommand AddPersonCommand
    {
        get
        {
            if (_AddPersonCommand == null)
            {
                _AddPersonCommand = new RelayCommand(p=> this.AddPerson());
            }
            return _AddPersonCommand;
        }
    }

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            NotifyPropertyChanged("Name");
        }
    }

    public int Age
    {
        get { return _age; }
        set
        {
            _age = value;
            NotifyPropertyChanged("Age");
        }
    }

    private void AddPerson()
    {
            Person p = new Person();
            p.Name = _name;
            p.Age = _age;
            _people.Add(p);
    }
}