当UserControl是ListBox中的DataTemplate时访问它

时间:2017-01-31 22:26:38

标签: c# wpf user-controls datatemplate

Stack Overflow的Fist time问题长时间用户。我对整个MVVM空间有些陌生,所以我觉得我的Google Fu让我失望了。如果我对其中的某些条款不正确,我会道歉。

我目前有一个可观察的列表类:InstrumentExecutor。

然后将此列表设置为名为InstrumentList的ListBox的ItemsSource。

ListBox被设置为使用DataTemplate和FrameworkElementFactory,它使用InstrumentControl UserControl来显示数据。

DataTemplate代码:

    DataTemplate instrumentDataTemplate = new DataTemplate();
    instrumentDataTemplate.DataType = typeof(InstrumentExecutor);
    FrameworkElementFactory frameelement = new FrameworkElementFactory(typeof(InstrumentControl));
    instrumentDataTemplate.VisualTree = frameelement;
    InstrumentList.ItemTemplate = instrumentDataTemplate;

这一切都很有效!数据流入和流出,每个人都很开心。这是我遇到麻烦的部分。

在用户控件中有一些Expander WPF代码。我想发送一个事件,调用一个方法,做一些事情来触发从父ListBox扩展或折叠到这个列表框中的每个项目。每当我迭代InstrumentList.Items时,数据源(InstrumentExecutor)是我看到的唯一数据。

我可以通过一些方法在数据类(Instrument Executor)中使用属性和通知,但我想知道是否可以使其更清晰。

那么有没有办法可以访问每个UserControl?我看过ItemContainerGenerator但运气不好。

感谢您的帮助!

更新1:在每个订单项的usercontrol加载事件期间使用VisualTreeHelper构思和一些StackOver,我可以找到父代(下面的代码)并以这种方式构建链接。这是与这个想法相关的代码。

public static T FindParent<T>(DependencyObject current) where T : class
{
        DependencyObject parent = VisualTreeHelper.GetParent(current);
        if (parent == null)
            return null;

        if (parent is T)
            return parent as T;
        else
            return FindParent<T>(parent);
}

它有效,但它不像我以前那样性感。接下来是尝试绑定的想法。谢谢!

0 个答案:

没有答案
相关问题