wpf访问由loadComponent()从ViewModel创建的XAML对象



我有一种需要访问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)
}

相关内容

  • 没有找到相关文章

最新更新