代码之家  ›  专栏  ›  技术社区  ›  Russ

“数据绑定字符串到数据模板化”复选框

  •  2
  • Russ  · 技术社区  · 16 年前

    我想在WPF中创建一个用复选框填充的列表框,我想用一个简单的字符串值对“content”值进行数据绑定。但是当我尝试的时候 <CheckBox Margin="5" Content="{Binding}" /> 应用程序崩溃。

    这就是我所拥有的。(我确信我遗漏了一些简单的东西)

    <ListBox Grid.Row="1" IsSynchronizedWithCurrentItem="True" x:Name="drpReasons">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel Orientation="Horizontal" >
                                </WrapPanel>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                        <ListBox.Resources>
                            <DataTemplate DataType="{x:Type System:String}">
                                <CheckBox Margin="5" Content="{Binding}" />
                        </DataTemplate>
                        </ListBox.Resources>
                    </ListBox>
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   Robert Macnee    16 年前

    您创建了一个无限递归的数据模板。通过为字符串设置DataTemplate,然后将复选框的内容设置为字符串,复选框将使用DataTemplate本身,因此您将在复选框中具有复选框,依此类推。

    您可以通过在复选框中显式放置一个文本块来修复它:

    <ListBox x:Name="drpReasons" Grid.Row="1" IsSynchronizedWithCurrentItem="True">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal">
                </WrapPanel>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.Resources>
            <DataTemplate DataType="{x:Type sys:String}">
                <CheckBox Margin="5">
                    <TextBlock Text="{Binding}"/>
                </CheckBox>
            </DataTemplate>
        </ListBox.Resources>
    </ListBox>