私は2つのフィールドを持っています
string Name
と
int Age
listView
ユーザーが を押したときに にバインドされているコレクションにこの情報を追加するにはどうすればよいButton
ですか?
簡単な例を次に示します。この記事で説明されている 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);
}
}