WPF - 将用户控件的代码绑定到后面的父代码中的另一个属性

时间:2016-05-10 07:26:57

标签: wpf xaml data-binding binding code-behind

我试图将用户控件的代码后面的代码绑定到另一个组件代码中的属性后面的代码"更高的"在xaml层次结构中。

我的主窗口后面的代码中有一个IEventAggregator属性。主窗口包含一些用户控件,我试图从其中一个用户控件访问该属性'代码背后。

我的xaml层次结构:主窗口 - >一些显示控制 - >另一个带有标签的显示控件,每个标签都有一个用户控件 - >想要的控制。

我试图这样做是因为在当前情况下,每个标签项都有一个用户控件,每个用户控件的构造函数都需要一些时间来运行,这会延迟我的应用程序。我希望用户控件的构造函数仅在单击特定选项卡项时运行,因此我从xaml代码中删除了用户控件并处理了选项卡项单击事件,只是从后面的代码更改了它的内容属性。我现在唯一需要做的就是给这个控件一个属性,它通过{Binding}来代替后面的代码。

我希望我的问题很清楚..谢谢:)

1 个答案:

答案 0 :(得分:0)

尝试上升可视树,找到父控件并从那里获取属性。

更新了#1

在您的用户控件中

    private void qqq_Click(object sender, RoutedEventArgs e)
    {
        var e1=listBox.Items;
        foreach (var c in listBox.ItemsSource)
        {
            MessageBox.Show(((FooClass)c).IsChecked.ToString());
        }

    }

常用界面代码:

...
            var foundControl = this;
            while (true)
            {
                //get parent item
                foundControl = foundControl.FindParent<Control>();
                if (foundControl == null) break;
                if (foundControl is IHaveSpecificProperty)
                    break;
            }
            var haveSpecificProperty = foundControl as IHaveSpecificProperty;
            if (haveSpecificProperty == null) return;
            var specificProperty = haveSpecificProperty.SpecificProperty;
            //add your logic here
...

帮助程序类代码:

//should be in a common place and both the ParentControl and the ChildControl should have an access to it,
//in addition your ParentControl should implement this interface
public interface IHaveSpecificProperty
{
    object SpecificProperty { get; set; }
}

问候。