Строка DataBind to DataTemplated - PullRequest
       20

Строка DataBind to DataTemplated

2 голосов
/ 06 марта 2009

Я хочу создать ListBox, заполненный флажками в 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 Ответ

3 голосов
/ 06 марта 2009

Вы создали бесконечно рекурсивный шаблон данных. Установив DataTemplate для String, а затем установив Content of CheckBox в String, CheckBox будет использовать сам DataTemplate, поэтому у вас будут CheckBoxes внутри CheckBoxes и т. Д.

Вы можете исправить это, явно поместив TextBlock внутри CheckBox:

<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>
...