这很好用:
<ItemsControl ItemsSource="{Binding Persons}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=FirstName}"/>
<TextBlock Text="{Binding Path=LastName}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但是,我想使用User Control代替带有两个TextBlocks的堆栈面板,使用类似的东西:
<DataTemplate>
<jasControls:NameView/>
</DataTemplate>
但是,有了这个和其他一百万种语法,NameView什么也没有显示,但它在ItemsControl之外的单独测试中工作正常,具有显式设置(依赖)属性 - 例如。
<jasControls:NameView FName="{Binding Path=Person.FirstName}" />
我几乎找不到任何这方面的例子,并且需要知道如何指定用户控件的属性 - 或者用户如何控制'接收'单个项类型(Person)?使用什么语法?我需要指定数据类型吗? ItemsControl是否会导致问题,或者是否应该进行任何类似的控制。列表框?我可以设计它以便用户控件获取整个Person对象吗?我在用户控件中需要哪些依赖属性?总之,如何将数据导入用户控件?!涉及的实际业务类型涉及用户控件中的一些逻辑会更复杂,因此我希望使用用户控件。
非常感谢收到任何指示 - TIA
答案 0 :(得分:5)
假设您的Persons
集合中包含许多Person
个对象,则DataContext
控件的NameView
属性将自动设置为Person
对象。
您不需要任何依赖属性来实现此壮举。您的NameView用户控件只是:
<UserControl ...>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</UserControl>
您应该没有代码隐藏来显示此信息。
从那里,您应该能够从DataContext属性访问Person对象:
Person person = this.DataContext as Person;