我正在使用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}”。
答案 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>