绑定到模板的属性ItemsPanelTemplate

时间:2019-03-31 14:33:18

标签: wpf xaml

我试图绑定到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中是否存在一种设计简单的预期方式来进行这种绑定。

0 个答案:

没有答案