在TestEntryView.xaml.cs中
public partial class TestEntryView : UserControl
{
public ObservableCollection<TestFieldView> Fields {get;set;}
...
}
其中TestFieldView是UserControl。
<UserControl x:Class="STS2Editor.View.TestEntryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vw="clr-namespace:STS2Editor.View"
mc:Ignorable="d"
x:Name="testEntryView"
d:DesignHeight="300"
d:DesignWidth="427"
d:DataContext="{Binding TestEntry, Source={StaticResource Sample}}">
<Grid Background="{DynamicResource ButtonNormalBorder}" TextElement.Foreground="{DynamicResource TextBrush}">
<Border Background="{DynamicResource ControlBackgroundBrush}" BorderBrush="{DynamicResource ControlBackgroundBrush}" BorderThickness="4" CornerRadius="16">
<Grid Margin="4" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer Background="{DynamicResource ControlBackgroundBrush}" Grid.IsSharedSizeScope="True" Grid.Row="1">
<ItemsControl x:Name="fieldList" ItemsSource="{Binding Fields, ElementName=testEntryView}"/>
</ScrollViewer>
</Grid>
</Border>
</Grid>
绑定是正确的,但是当我窥探视觉树时,我的子项目全部由边框和内容演示者组成,没有儿童视觉效果。
答案 0 :(得分:2)
如果由于某种原因我的UserControl(TestFieldView)上没有调用LoadComponent并且未正确解析Xaml,我只能重新创建您的情况。这发生在InitializeComponent中(参见例如What does InitializeComponent() do, and how does it work in WPF?)。你确定在TestFieldView的构造函数中调用它吗?
答案 1 :(得分:0)
“TestEntryView.Fields”属性是DependencyProperty吗?或者它至少会引发一个PropertyChanged事件?上面的例子不清楚它是否如此。如果它不是DP或不引发PropertyChanged事件,请尝试其中一个。这可能是解决方案。
修改强>
要将其更改为依赖项属性,请执行以下操作:
public ObservableCollection<TestFieldView> Fields
{
get { return (ObservableCollection<TestFieldView>)GetValue(FieldsProperty); }
set { SetValue(FieldsProperty, value); }
}
public static readonly DependencyProperty FieldsProperty =
DependencyProperty.Register("Fields", typeof(ObservableCollection<TestFieldView>), typeof(MainWindow),
new UIPropertyMetadata(new ObservableCollection<TestFieldView>()));
答案 2 :(得分:0)
您确定这是绑定是否连接到正确的数据?
我更喜欢{Binding Fields,RelativeSource={RelativeSource TemplatedParent}}
来自用户控件的绑定方法,但它应该以任何一种方式工作(只要你确定它的绑定它无关紧要(可能取决于你如何创建控件的实例)
您似乎没有与TestFieldView项目或任何内容关联的样式或DataTemplate? 此外,由于您使用的是ItemsControl,因此您可能还需要定义ItemsPaneltemplate。
<ItemsControl Grid.Row="1" ItemsSource="{Binding Fields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
不确定没有得到你的代码并搞乱它直到它的工作,但它可能是项目控制,面板模板,数据模板方面的东西。
虽然如果我完全误解你可以尝试用ListView替换ItemsControl(因为这至少应该显示一个类名列表),这会给你一些显示然后你可以在那里工作。