2012-04-02 10 views
0

質問タイトルの中には、ほとんどすべてが言われています。私は一つのウインドウに動物のリストボックスを持ち、 "新しい動物を加える"ボタンを持っています。そのボタンをクリックすると、新しいウィンドウが表示されます。動物の必要な日付を入力し、「動物を保存」ボタンを押すと、その動物を最初のウィンドウのリストボックスに追加します。親ウィンドウのリストボックスに項目を追加しますか?

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

はGrid.RowDefinitionsとGrid.ColumnDefinitionsのように、すべてのXAMLコードをコピーしませんでした。 Button_Clickで私はちょうどNewAnimalWindow n = new NewAnimalWindow(); n.ShowDialog();と言う。

NewAnimalWindowには名前と体重の2つのテキストボックスがあり、動物タイプのコンボボックスと親ウィンドウの動物コレクションに動物を追加するボタン「動物を保存」があります。実装の場合のほとんどの些細な

答えて

0

がAnimalsListをNewAnimalWindowでカスタムコンストラクタを定義して渡すために、次のようになります。

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. アプリケーションのどこかに地球の動物のリストを使用して
  2. 動物の代わりにいくつかのポストバックインターフェイスを送信すると、Saveボタンのクリック時に呼び出されるAddAnimal(動物)のようなメソッドで表示されます
  3. 保存ボタンをクリックすると起動するNewAnimalWindowでイベントを作成する。
  4. 他の多くの可能性があります。
0

私は、作成されたオブジェクトへのアクセスを許可するNewAnimalWindowのプロパティに行きます。

メインウィンドウ

var animalWindow = new NewAnimalWindow(); 
animalWindow.ShowDialog(); 

if (animalWindow.DialogResult.HasValue && animalWindow.DialogResult.Value) 
{ 
    var createdAnimal = animalWindow.CreatedAnimal; 
    Animals.Add(createdAnimal); 
} 

あなたはMediatorパターンや火災のイベントを使用することができるのviewmodelsで作業している場合は別の方法として

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

は、動物が作成されNewAnimalWindow ので、メインビューモデルはリストに追加できます。

関連する問題