我有一种需要访问XAML对象的方法。
我知道这打破了MVVM约定,但是在其他情况下,我无法简单地使用数据绑定。
这是XAML代码
<Page x:Class="RainforestExcavator.cs1.UI.TestCasePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RainforestExcavator.cs1.UI"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="TestCasePage">
<Grid>
<TreeView x:Name="treeView"/>
</Grid>
我有一个需要填充树景的ViewModel。
public class TestSuiteViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public TestSuiteViewModel()
{
LoadData();
LoadCommand();
Messenger.Messenger.Default.Register<string>(this, OnPlanPopulated,"PlanUpdated");
}
private void OnPlanPopulated(string selectedPlan)
{
methodThatWillPopulateTheTreeView(selectedPlan, treeView)
}
}
有一个使徒类,该类将触发"填充选择计划"时触发"平面填充"方法。
我在这个问题上遇到了麻烦。
也就是说,我无法访问在initialize()上创建的testCasepage对象。
有没有办法做到这一点?
如果您想能够访问treeview或视图模型中的页面,则需要在参考它中传递。而不是使用Messenger发送简单的字符串作为有效负载,而是可以定义一个可以携带字符串和引用treeview/page的类型:
public class ThePayLoad
{
public string SelectedPlan {get; set;}
public TreeView TreeView { get; set; }
}
然后,您将此类型用作Messenger的发送和注册方法的类型参数;
查看:
Messenger.Messenger.Default.Send<ThePayLoad>( new ThePayLoad() { SelectedPlan = "selected plan...", TreeView = treeView} );
查看模型:
public TestSuiteViewModel()
{
LoadData();
LoadCommand();
Messenger.Messenger.Default.Register<ThePayLoad>(this, OnPlanPopulated,"PlanUpdated");
}
private void OnPlanPopulated(ThePayLoad payload)
{
methodThatWillPopulateTheTreeView(payLoad.SelectedPlan, payLoad.treeView)
}