如何在muiltbinding中绑定listboxitem内容?

时间:2014-04-16 20:10:08

标签: wpf

我正在使用wpf完成我的第一个项目。我真的需要你的帮助和建议。提前谢谢。

我正在构建一个屏幕,它有两个列表框A& B.列表框A绑定到从数据库加载的项目。列表框B绑定到静态列表。当用户选择列表框A中的项目时,关联项目将在列表框B中突出显示。我是通过在listboxtitem中使用MultiBinding来完成的。我想传递选定的数据对象和listboxitem内容。 Convert()将获取这两个变量并检查它们。如果匹配,它将返回true为项的IsSelected属性并突出显示它。但似乎项目内容(静态字符串)无法传递给converter()。我该怎么办?

查看我的xaml代码:

             <ListBox Name="AbsenseCode" ItemsSource="{Binding absenseCodeItems}" Grid.Row="1" Grid.Column="1" Grid.RowSpan="5" Margin="20,0,20,5" >
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="{x:Type ListBoxItem}">
                            <Setter Property="IsSelected">
                                <Setter.Value>
                                    <MultiBinding Converter="{StaticResource IsItemSelected}">
                                        <Binding ElementName="FilterListbox" Path="SelectedItem"/>
                                        <Binding Path="Content"/>
                                    </MultiBinding>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </ListBox.ItemContainerStyle>
              </ListBox>

调试时,第二个binging变量item的内容为“{DependencyProperty.UnsetValue}”。

1 个答案:

答案 0 :(得分:0)

这是几个月大,但我有类似的情况。

首先,构建一个iMultiValueConveter,它将比较两个值并将结果返回给字符串。 &#34;真&#34;或&#34;假&#34;或&#34;是&#34;或&#34;不&#34;。

然后在XAML中定义一个可以由转换器返回触发的样式。在这里,ListBoxB有一个椭圆,如果值匹配,填充将为绿色,如果不匹配则为红色:

 <Window.Resources>
    <myNamespace:IsEqualConverter x:Key="IsEqualConverter" />
</Window.Resources>


<ListBox Name="ListBoxA" ItemsSource="{Binding}">

</ListBox>

<ListBox Name="ListBoxB" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <StackPanel>
            <StackPanel.Resources>
                <!-- style triggered by converter result -->
                <Style TargetType="Ellipse" x:Key="EllipseStyle">
                    <Setter Property="Fill" Value="#E5E5E5" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=result,Path=Text}" Value="true">
                            <Setter Property="Fill" Value="Green" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=result,Path=Text}" Value="false">
                            <Setter Property="Fill" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </StackPanel.Resources>
            <Ellipse Height="50" Width="50" Style="{StaticResoure EllipseStyle}" />
            <TextBlock x:Name="value0" Text="{Binding ElementName=ListBoxA,Path=SelectedItem.(Whatever),Mode=OneWay}" />
            <TextBlock x:Name="value1" Text="{Data Binding you want to compare to}" VerticalAlignment="Center" HorizontalAlignment="Left" />
            <TextBlock x:Name="result">
                <TextBlock.Text>
                    <MultiBinding Converter="{StaticResource IsEqualConverter}">
                        <Binding ElementName="value0" Path="Text" />
                        <Binding ElementName="value1" Path="Text" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </ListBox.ItemTemplate>
</ListBox>