我的班级看起来像这样:
public class testclass
{
public List<otherClass> references { get { return _references; } }
}
我的otherClass看起来像这样
public class otherClass
{
public string name { get; set; }
}
现在我尝试访问这个&#34; otherClass&#34;在DataTemplate中
<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
<GroupBox DataContext="{Binding references }">
...
</DataTemplate>
这个工作正常,或者我认为至少,beaucse intellisense自动完成它。但是现在我怎样才能访问&#34; otherClass&#34;的名称属性? ?
答案 0 :(得分:2)
您只需要将List绑定到ItemsControl类型,例如ListBox,DataGrid等,而ItemsControl将使用&#39; otherClass&#39;列表中的实例作为其中每个项目的DataContext。因此,您可以找到一个&#39;映射&#39;有:
'List<otherClass>'--'ItemsControl' 'otherClass'--'Item'
我认为&#39; AdminInterfaceViewModel&#39;是你的DataContext,以及&#39;引用&#39;是它的一个属性,所以试试这个:
<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
<GroupBox>
<ListBox ItemsSource="{Binding references}">
<ListBox.ItemTemplate>
<DataTemplate>
<TexBox Text="{Binding name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</GroupBox>
</DataTemplate>
<强>&GT;更新强>
1.假设您有一个MainViewModel,其中包含一个名为MyViewModel的属性,其类型为&#39; AdminInterfaceViewModel&#39;。
class MainViewModel
{
public AdminInterfaceViewModel MyViewModel {get; set;}
}
2.您已经设置了&#39; MainViewModel&#39;作为Window的DataContext,您可以使用属性&#39; MyViewModel&#39;在xaml。
<Window>
<Grid>
<ContentControl Margin="20" Content="{Binding MyViewModel}">
</ContentControl>
</Grid>
</Window>
3.在ResourceDictionary中定义DataTemplate,例如&#39; generic.xaml&#39;。删除x:Key,然后DataTemplate将自动应用于每个&#39; AdminInterfaceViewModel&#39;类型实例。
<DataTemplate x:Key="templateCore" DataType="{x:Type vm:AdminInterfaceViewModel}" >
<GroupBox>
<ListBox ItemsSource="{Binding references}">
<ListBox.ItemTemplate>
<DataTemplate>
<TexBox Text="{Binding name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</GroupBox>
</DataTemplate>
点击此链接,它可以解决您的潜在问题:MVVM pattern