我试图绑定到ItemsControl中ItemsPanelTemplate的属性。
我编写了一个名为FlowingGrid的自定义面板,它具有一些自定义布局行为,并且工作得很好。我现在正尝试利用选择项目的标准WPF ItemsControl功能。我将FlowingGrid用作ItemsPanelTemplate,它可以按预期工作。
我的FlowingGrid公开了一个名为ColumnCount的DependencyProperty,它显示了要显示的列数。简单的东西。
如何将Label或其他控件绑定到此ColumnCount属性?
据我了解,模板是一种非常整洁的解决方案,用于独立于控件的内部工作方式来更改控件的外观。非常适合这种情况,在这种情况下我需要特定的布局行为,但又希望使用标准的项目选择行为。但是,模板化模板控件的属性变得无法绑定的目的是什么?
我尝试通过ElementName进行绑定,并使用OneWayToSource进行反向绑定。两者都不起作用。 (我认为OneWayToSource不会是一个合适的解决方案,因为那样以后我将无法使用绑定作为设置选项)
尝试使用ElementName:
<Label
Content="{Binding ElementName=flw, Path=ColumnCount}"
></Label>
尝试使用OneWayToSource:
<aud:FlowingGrid
x:Name="flw"
ColumnCount="{Binding ElementName=lab, Path=Content, Mode=OneWayToSource}"
></aud:FlowingGrid>
一些代码显示了我想要做什么。我写的正确绑定是什么???
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Label>ColumnCount</Label>
<Label
Content="{Binding ????}"
></Label>
</StackPanel>
<ItemsControl
Grid.Column="1"
ItemsSource="{Binding ViewModels}">
<ItemsPanelTemplate>
<aud:FlowingGrid
x:Name="flw"
></aud:FlowingGrid>
</ItemsPanelTemplate>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button
Content="{Binding Name}"
></Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我正在尽我所能,使我的控件模块化,可重用和独立,以避免奇怪的硬耦合。
我想知道在WPF中是否存在一种设计简单的预期方式来进行这种绑定。