如何从新窗口提取数据.WPF MVVM



我正在使用MVVM架构模式处理WPF。

但是我被困在这个问题上,我似乎无法解决它。

我制作了一个打开的新窗口,用户可以输入用户按"ADD"时应该创建的对象的数据,但我知道如何打开它,但我不知道如何通过文本框提取插入的数据用于对象创建。

这是我输入数据的新窗口的示例,我尝试 实现数据绑定

<Grid Margin="0,0,2,0">
<Label x:Name="NameLB" Content="Reactor Name:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Width="89" RenderTransformOrigin="0.383,0.423"/>
<Label x:Name="NameErrorLB" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="226,10,0,0" Width="143"/>
<TextBox x:Name="ReactorNameTB" Text="{Binding ReactorNameText}"  HorizontalAlignment="Left" Height="26" Margin="104,10,0,0"  VerticalAlignment="Top" Width="117"/>
<Label x:Name="IdLB" Content="Reactor ID:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,41,0,0" Width="89" RenderTransformOrigin="0.383,0.423"/>
<Label x:Name="IdErrorLB" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="226,41,0,0" Width="143"/>
<TextBox x:Name="ReactorIdTB" Text="{Binding ReactorIdText}" HorizontalAlignment="Left" Height="26" Margin="104,41,0,0"  VerticalAlignment="Top" Width="117"/>
<Label x:Name="TypeLB" Content="Reactor Type:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,72,0,0" Width="89" RenderTransformOrigin="0.383,0.423"/>
<RadioButton x:Name="TypeRB1" IsChecked="{Binding ReactorType1}" Content="Type 1" HorizontalAlignment="Left" Margin="104,78,0,0" VerticalAlignment="Top" />
<RadioButton x:Name="TypeRB2" IsChecked="{Binding ReactorType2}" Content="Type 2" HorizontalAlignment="Left" Margin="167,78,0,0" VerticalAlignment="Top" />
<Label x:Name="TypeErrorLB" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="226,72,0,0" Width="143"/>
<Button x:Name="AddBT" Command="{Binding AddNewReactor}" Content="ADD" HorizontalAlignment="Left" Margin="123,102,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>

这是我使用命令的视图模型实现

public MyICommand OpenAddReactorWindow { get; set; }
public MyICommand AddNewReactor { get; set; }
public MyICommand ExitApplication { get; set; }
// fields that i tried to bind with DataBinding
private string reactorNameText;
private string reactorIdText;
private string reactorType1;
private string reactorType2;
public ReactorViewModel()
{
OpenAddReactorWindow = new MyICommand(OpenAddReactor);
AddNewReactor = new MyICommand(CreatNewReactor);
ExitApplication = new MyICommand(CloseApplication);
}

private void OpenAddReactor()
{
AddReactorWindow window = new AddReactorWindow();
window.Show();
}
private void CreatNewReactor()
{
// here is where I struggle with implementation
}

这不是所有代码,这将是一个很长的帖子,所以我想保持简短,如果缺少某些内容,我可以上传它。

如果有人有建议,或者可以向我解释,我做错了什么那就太好了!

您可以在此问题中使用 2 个视图模型。一个用于您的主窗口(您有(,另一个用于您的新窗口(这是您需要创建的新窗口(。

主窗口视图模型

NewWindowViewModel vm = new NewWindowViewModel();
private void CreatNewReactor()
{
NewWindow nw = new NewWindow();
nw.DataContext = vm;
if(nw.ShowDialog() == true)
{
//do something
//you can also pass new window databinding into main ViewModel
//for example: something = vm.something
}
}

最新更新