2つのウィンドウで構成されるwpfに何かをバインドしようとしています。私は、最初のウィンドウにデータを結合することが可能ですが、実際にそれが第二のウィンドウで実行する必要がありますどのように私の心を置くことはできません。別のウィンドウにデータをバインドする
メインウィンドウコード:
public partial class MainWindow : Window
{
private string repeatNumber;
public MainWindow()
{
InitializeComponent();
string[] assignments = new string[] { "https://cdn2.iconfinder.com/data/icons/animals/48/Turtle.png", "https://cdn2.iconfinder.com/data/icons/animals/48/Butterfly.png", "https://cdn2.iconfinder.com/data/icons/animals/48/Dolphin.png", "https://cdn2.iconfinder.com/data/icons/animals/48/Elephant.png", "https://cdn2.iconfinder.com/data/icons/animals/48/Hippopotamus.png", "https://cdn2.iconfinder.com/data/icons/animals/48/Panda.png" };
Random rnd = new Random();
string[] randomingArray = assignments.OrderBy(x => rnd.Next()).ToArray();
List<Images> animals = new List<Images>();
for (int i = 1; i < 100; i++)
{
if (i == 9)
{
repeatNumber = randomingArray[i % randomingArray.Length];
animals.Add(new Images() { Source = repeatNumber, Number = i });
}
else if ((i % 9) == 0)
{
animals.Add(new Images() { Source = repeatNumber, Number = i });
}
else
{
animals.Add(new Images() { Source = randomingArray[i % rnd.Next(1,5)], Number = i });
}
ItemsControl1.ItemsSource = animals;
}
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("test");
}
private void btn2_Click(object sender, RoutedEventArgs e)
{
Window1 window1 = new Window1();
window1.Show();
}
}
}
class Images
{
public int Number { get; set; }
public string Source { get; set; }
}
メインウィンドウのXAML:
今<Grid>
<ListBox x:Name="ItemsControl1">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5">
</UniformGrid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="3" Width="Auto" Height="Auto">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Number}"/>
<Image Source="{Binding Source}" Margin="0,0,5,0"/>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Grid>
<Button x:Name="btn1" Click="btn1_Click" Height="20" VerticalAlignment="Bottom" Margin="127,0,316,0" Content="Instruction"></Button>
<Button x:Name="btn2" Click="btn2_Click" Height="20" VerticalAlignment="Bottom" Margin="300,0,109,0" Content="Results" Width="74"> </Button>
</Grid>
</Grid>
ウィンドウ2のコードはちょうどです:今ちょうど私windows2ため
public class Window2 : Window
{
//should return the value of repeatNumber
}
XAML:
<Grid>
</Grid>
私は、MainWindow repeatNumberから値を取得しようとしています。どのように私はそれを達成することができますか?
他のウィンドウにバインドする変数をコンストラクタの引数として渡すことができます。または、window2コードビハインドの下でパブリックプロパティとして定義することもできます。より良いアプローチは、おそらく共通のビューモデルを定義し、コンストラクタを使用して共有することです。 – mcy
本当にこのhttps://msdn.microsoft.com/en-us/magazine/dd419663.aspxを見てください。 MVVMを使用すると、ウィンドウのロジックをviewmodelというクラスに持ち込むことができます。この単一のクラスを使用して、任意のウィンドウまたはユーザーコントロールにavailablaデータを作成することができます –