我有一个需要访问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>
我有一个需要填充treeView的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)
}
}
有一个信使类会触发&#34; OnPlanPopulated&#34;填充selectedPlan时的方法。
我在这方面遇到了麻烦。
即,我无法访问在Initialize()上创建的TestCasePage对象。
有办法做到这一点吗?
答案 0 :(得分:0)
如果您希望能够在视图模型中访问TreeView或Page,则需要传入对它的引用。使用Messenger发送一个简单的字符串作为有效负载,您可以定义一个类型,它可以携带字符串和对TreeView / Page的引用:
public class ThePayLoad
{
public string SelectedPlan {get; set;}
public TreeView TreeView { get; set; }
}
然后使用此类型作为messenger的Send和Register方法的类型参数;
查看:强>
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)
}