【问题标题】:How do you pass "this" to the constructor for ObjectDataProvider in XAML?如何将“this”传递给 XAML 中 ObjectDataProvider 的构造函数?
【发布时间】:2008-10-28 13:55:25
【问题描述】:

如何将“this”传递给 XAML 中 ObjectDataProvider 的构造函数。

假设我的演示者课程是:

public class ApplicationPresenter(IView view){}

并且我的 UserControl 实现了 IView。

我应该在下面的代码中将什么传递给 ConstructorParameters 以便 UserControl 可以使用默认构造函数创建 ApplicationPresenter?

<ObjectDataProvider x:Key="ApplicationPresenterDS" 
ObjectType="{x:Type Fenix_Presenters:ApplicationPresenter}" 
ConstructorParameters="{ ?? what goes here ??}" d:IsDataSource="True" />

我只需要这样做,以便我可以使用 Blend 2。我知道我可以在后面的代码中执行此操作,但如果我这样做,我无法从 Blend 中实例化该类。我也知道我可以为 ApplicationPresenter 创建一个无参数的构造函数,并传递一个实现 IView 的虚拟类,但如果可能的话,我宁愿在标记中这样做。

我现在的代码是:

public MyUserControl()
{
    InitializeComponent();
    DataContext = new ApplicationPresenter(this); 
}

【问题讨论】:

    标签: wpf xaml objectdataprovider


    【解决方案1】:

    我刚开始使用 Wpf,并且误以为我应该尝试在 XAML 中做所有事情。我刚刚观看了来自WindowsClient.net 的一些视频,这些视频开始澄清一些事情。但是天哪,这是一项复杂的技术!!!

    【讨论】:

      【解决方案2】:

      我不知道它是否有效,但你可以给你的用户控件一个名字,例如

      x:Name="myUserCotrol"
      

      然后在绑定中使用它:

      ... ConstructorParameters="{Binding ElementName=myUserControl}" ...
      

      这可以工作

      【讨论】:

      • 这不起作用,因为 ObjectDataProvider 不是从 DependencyObject 派生的,因此 ConstructorParameters 不是 DependencyProperty,这是 DataBinding 的要求。
      【解决方案3】:

      这将在 XAML 的下一版本中直接支持(如果内存服务良好)demonstrated by Rob Relyea at this year's PDC

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多