几乎一切都在问题标题中说。我在一个窗口中有动物列表框,按钮“添加新动物”。当我点击该按钮时,会出现一个新窗口,我将在其中输入动物的必要日期,在“保存动物”按钮上,我想将该动物添加到第一个窗口的列表框中。
<Window x:Class="HelloZooWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:model="clr-namespace:HelloZoo.Model;assembly=HelloZoo.Model"
xmlns:helloZooWpf="clr-namespace:HelloZooWPF"
Title="Hello Zoo Wpf"
Height="500"
Width="525">
<Window.DataContext>
<model:Zoo Name="Belgrade Zoo">
<model:Zoo.Animals>
<model:Lion Name="Zeus" Weight="900" ImagePath="pack://application:,,,/Images/Lion.jpg"/>
<model:Lion Name="Simba" Weight="200" ImagePath="pack://application:,,,/Images/Lion.jpg"/>
<model:Antelope Name="Daisy" Weight="200" ImagePath="pack://application:,,,/Images/antelope.jpg"/>
<model:Antelope Name="Rosie" Weight="200" ImagePath="pack://application:,,,/Images/antelope.jpg"/>
<model:Antelope Name="Goldie" Weight="200" ImagePath="pack://application:,,,/Images/antelope.jpg"/>
</model:Zoo.Animals>
</model:Zoo>
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding Path=Animals}" Grid.Row="2" AlternationCount="2"/>
<Button Content="New animal" Click="Button_Click"/>
</Grid>
</Window>
没有复制所有的xaml代码,比如Grid.RowDefinitions和Grid.ColumnDefinitions。在Button_Click上我只说NewAnimalWindow n = new NewAnimalWindow(); n.ShowDialog();
。
NewAnimalWindow只有两个名称和重量的文本框,动物类型的组合框和按钮“保存动物”,我想在父窗口中将动物添加到动物的集合中。
答案 0 :(得分:0)
最简单的实现案例是在NewAnimalWindow中定义自定义构造函数并在那里传递AnimalsList:
public class NewAnimalWindow : ...
{
private List<Animal> _animals;
public NewAnimalWindow(List<Animal> animals)
{
_animals = animals;
}
....
public SaveButton_Click(...)
{
Animal animal = new Animal(name, weight);
_animals.Add(animal);
}
}
其他选项包括:
答案 1 :(得分:0)
我会在NewAnimalWindow上找一个属性,它允许访问创建的对象。
<强>主窗口强>
var animalWindow = new NewAnimalWindow();
animalWindow.ShowDialog();
if (animalWindow.DialogResult.HasValue && animalWindow.DialogResult.Value)
{
var createdAnimal = animalWindow.CreatedAnimal;
Animals.Add(createdAnimal);
}
<强> NewAnimalWindow 强>
<Button IsDefault="True" Click="Button_OK_Click">Close</Button>
<Button IsCancel="True">Cancel</Button>
private Animal _animal;
public Animal CreatedAnimal
{
get
{
return _animal;
}
}
private void Button_OK_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
或者,如果您正在使用ViewModels,则可以在创建动物时使用Mediator模式并触发事件,因此主视图模型可以将其添加到列表中。