Как я могу заставить работать мультисвязывание в XAML ListBox? - PullRequest
2 голосов
/ 23 февраля 2009

Следующее показывает мне 3x «MultiTest.Model.Customers» в ListBox (по одному для каждой записи, которую он должен отображать).

Что мне нужно изменить, чтобы вместо него выводилось содержимое полей?

<Window.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="ContentTemplate" >
            <Setter.Value>
                <MultiBinding StringFormat="{}{1}, {0} ">
                    <Binding Path="FirstName" />
                    <Binding Path="LastName"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <ListBox x:Name="theCustomers"/>
</Grid>

связывание в коде с помощью ADO.NET Entity Framework:

MainEntities db = new MainEntities();
var customers = from c in db.CustomersSet
                select c;
theCustomers.ItemsSource = customers;

ОТВЕТ:

Спасибо, Стив, вот ваш ответ в моем формате Window.Resources:

<Window.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="ContentTemplate" >
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock>
                            <TextBlock.Text>
                                <MultiBinding  StringFormat="{}{1}, {0} ({2})">
                                    <Binding Path="FirstName"/>
                                    <Binding Path="LastName"/>
                                    <Binding Path="ID"/>
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <ListBox x:Name="theCustomers"/>
</Grid>

Ответы [ 2 ]

2 голосов
/ 23 февраля 2009

Если вы особенно хотите использовать MultiBinding, вы сможете использовать DataTemplate с StringFormat .. что-то вроде:

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding  StringFormat="{}{1}, {0}">
                        <Binding Path="FirstName"/>
                        <Binding Path="LastName"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
       </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

Или для чего-то более сложного вы можете использовать ValueConverter (или вариант множественного связывания).

1 голос
/ 23 февраля 2009

Я никогда раньше не использовал MultiBinding. Я использовал, однако, DataTemplates:

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Name}"></TextBlock>
            <TextBlock Text=" - "/>
            <TextBlock Text="{Binding Email}" Margin="5,0"></TextBlock>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...