gpt4 book ai didi

c# - 如何从 View 模型中弹出子窗口

转载 作者:行者123 更新时间:2023-12-03 10:33:26 27 4
gpt4 key购买 nike

我必须在我的主 ViewModel 中启动某种子窗口,并且在这个子窗口上用户将输入一些文本,我必须在关闭子窗口后在主视图模型中使用这个文本。

我可以弹出一个子窗口,我绑定(bind)到它的子窗口 View 模型

我启动子窗口的主视图模型是:

private void OpenLayoutNameWindow()
{
LayOutName_VM chldWindow =new LayOutName_VM();
chldWindow.Show();
string layOutName = chldWindow.LayOutName;
MessageBox.Show("Name is:"+ layOutName); //this message box is popuped before i close the child window save button and its empty.
}

这是子窗口的 View :
<StackPanel>
<Label Margin="0,5,0,0" HorizontalAlignment="Center">Please name your new Layout</Label>
<TextBox Margin="0,5,0,0" Width="120" Height="20" HorizontalAlignment="Center" Text="{Binding LayOutName, Mode=TwoWay}"></TextBox>
<Button Margin="0,5,0,0" Width="80" Height="20" HorizontalAlignment="Center" Command="{Binding CloseWindowCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"> Save</Button>
</StackPanel>

这是后面的代码:
public partial class LayOutName : Window
{
public LayOutName()
{
InitializeComponent();
this.DataContext = new LayOutName_VM(); ;
}
}

这是子窗口 View 模型:
class LayOutName_VM : ViewModelBase
{
public ActionCommand<Window> CloseWindowCommand { get; private set; }

public LayOutName_VM()
{
this.CloseWindowCommand = new ActionCommand<Window>(this.SaveLayOutName);
}

private string layOutName;
public string LayOutName
{
get
{
return layOutName;
}
set
{
layOutName = value;
RaisePropertyChanged("LayOutName");
}
}

private void SaveLayOutName(Window wind)
{
wind.Close();
}

internal void Show()
{
LayOutName ly = new BrukerApp.LayOutName();
ly.Show();
}
}

如何获取在子窗口中输入的文本到 viewmodel 类。

最佳答案

您可以调用 ShowDialog() 而不是 Show() 来阻止:

chldWindow.ShowDialog();

然后,在对话框窗口关闭之前,您将无法访问以下代码行:
string layOutName = chldWindow.LayOutName;

另请注意,如果您认真遵循 MVVM 模式,则应该使用某种服务来打开窗口,而不是直接从 View 模型中打开:

Opening new window in MVVM WPF

关于c# - 如何从 View 模型中弹出子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45011498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com