您好我有一个使用MVVM灯的Silverlight MVVM应用程序。 当我打开应用程序时,应弹出子窗口,在子窗口中指定条件并单击“确定”按钮后,主窗口应显示详细信息。
public MainPage()
{
ChildPage cp = new ChildPage();
cp.Show();
InitializeComponent();
}
点击子窗口上的OK按钮后,该窗口将消失,并在主窗口上显示对象列表。在子窗口的视图模型中,我有一个RelayCommand OKCommand。
private void WireCommands()
{
OKCommand = new RelayCommand(GetEmployees);
}
private void GetEmployees()
{
IEnumerable<Employees> employees;
employees = from employee in Employees where employee.Name == selectedEmployee.Name select employee;
Employees= new ObservableCollection<Employee>(employees);
}
员工具有所需的结果。但我不知道如何关闭chils窗口并将结果移动到父窗口。提前谢谢。
答案 0 :(得分:1)
您可以使用(按递增顺序进行解耦):
使用.NET事件
ChildPage cp = new ChildPage();
cp.NameReceived += NameReceived;
cp.Show();
private void NameRecieved(object sender, NameReceivedEventArgs eventArgs)
{
// retrieve employees using eventargs.Name
}
使用Caliburn.Micro中的Event Aggregator
public class MainPage : Screen, IHandle<NameReceivedMessage>
{
public MainPage(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(NameReceivedMessage message)
{
// retrieve employees using message.Name which is the inputted name
}
}
我们在从ChildPage收到名称后,在MainPage中进行员工检索。或者,您可以在ChildPage中检索员工,并在事件args / message中传递它们。
答案 1 :(得分:0)
要关闭子窗口,您可以使用ChildWindow的Close()方法,也可以将DialogResult属性设置为true或false,也可以将其关闭。 您必须在OK按钮的OnClick事件上的ChildPage代码隐藏中执行此操作。
要访问ChildPage的ViewModel的Employees属性,您可以执行以下操作:
public MainPage()
{
ChildPage cp = new ChildPage();
cp.Closed += (s,e) =>
{
//Do something with (cp.DataContext as ChildPageViewModel).Employees
}
cp.Show();
InitializeComponent();
}