Wpf 如何使用新项目更新listView?

Wpf 如何使用新项目更新listView?,wpf,listview,mvvm,Wpf,Listview,Mvvm,我有两个字段 <Grid> <Grid.RowDefinitions> <RowDefinition Height="60*" /> <RowDefinition Height="20*" /> <RowDefinition Height="20*" /> </Grid.RowDefinitions> <ListBox ItemsSource="

我有两个字段

<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>
字符串名称

<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>

<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>
int-Age

<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>

当用户按下
按钮时,如何将此信息添加到绑定到
列表视图的集合中

下面是一个简单的例子。它假定使用本文中描述的RelayCommand和ObservableObject类

<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>
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>

<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>
最后,创建一个简单的viewModel来处理信息

<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; }
}
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);
    }
}
公共类AppViewModel:observeObject
{
私人互联网;
私有字符串\u名称;
私人中继命令_AddPersonCommand;
私人ObservableCollection_people=新ObservableCollection()
{
新人{Name=“Ben”,年龄=26},
新人{Name=“George”,年龄=40},
新人{Name=“Amy”,年龄=38},
新人{Name=“April”,年龄=22},
新人{Name=“Mick”,年龄=45},
新人{Name=“Steph”,年龄=32},
新人{Name=“Mel”,年龄=35},
新人{Name=“Emma”,年龄=28},
};
公众人数
{
获取{return\u people;}
}
公共ICommand AddPersonCommand
{
得到
{
if(_AddPersonCommand==null)
{
_AddPersonCommand=newrelayCommand(p=>this.AddPerson());
}
返回_AddPersonCommand;
}
}
公共字符串名
{
获取{return\u name;}
设置
{
_名称=值;
NotifyPropertyChanged(“名称”);
}
}
公共信息
{
获取{return\u age;}
设置
{
_年龄=价值;
通知财产变更(“年龄”);
}
}
个人
{
人员p=新人员();
p、 名称=_名称;
p、 年龄=_年龄;
_新增(p);
}
}

下面是一个简单的例子。它假定使用本文中描述的RelayCommand和ObservableObject类

<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>
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>

<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>
最后,创建一个简单的viewModel来处理信息

<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; }
}
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);
    }
}
公共类AppViewModel:observeObject
{
私人互联网;
私有字符串\u名称;
私人中继命令_AddPersonCommand;
私人ObservableCollection_people=新ObservableCollection()
{
新人{Name=“Ben”,年龄=26},
新人{Name=“George”,年龄=40},
新人{Name=“Amy”,年龄=38},
新人{Name=“April”,年龄=22},
新人{Name=“Mick”,年龄=45},
新人{Name=“Steph”,年龄=32},
新人{Name=“Mel”,年龄=35},
新人{Name=“Emma”,年龄=28},
};
公众人数
{
获取{return\u people;}
}
公共ICommand AddPersonCommand
{
得到
{
if(_AddPersonCommand==null)
{
_AddPersonCommand=newrelayCommand(p=>this.AddPerson());
}
返回_AddPersonCommand;
}
}
公共字符串名
{
获取{return\u name;}
设置
{
_名称=值;
NotifyPropertyChanged(“名称”);
}
}
公共信息
{
获取{return\u age;}
设置
{
_年龄=价值;
通知财产变更(“年龄”);
}
}
个人
{
人员p=新人员();
p、 名称=_名称;
p、 年龄=_年龄;
_新增(p);
}
}

我们需要一些代码。您使用的是MVVM框架吗?支持INotify…?我没有什么要显示的-我只是有两个字段的简单ListView,在viewmodel中我想添加新的ListViewItem,我们需要一些代码。您使用的是MVVM框架吗?支持INotify…?我没有什么要显示的-我只是有两个字段的简单ListView,我想在viewmodel中添加新的ListViewItem