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);
}
它有效,但它不像我以前那样性感。接下来是尝试绑定的想法。谢谢!