在WPF中绑定多个源元素的依赖属性

时间:2019-09-26 12:46:36

标签: c# wpf xaml mvvm combobox

是否可以将多个源绑定到元素的依赖属性?

在我的情况下,我有一个组合框控件,其ItemSource属性由视图模型填充,但是Text属性绑定到由ItemsControl使用的模型。

谢谢。

xaml片段:

<DataTrigger Binding="{Binding EnumType}" Value="6">
<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>                
            <ComboBox    
                x:Name="ListOfItems"  
                IsDropDownOpen="{Binding IsDropDownOpen,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
                StaysOpenOnEdit="True"
                IsTextSearchEnabled="False"
                IsReadOnly="False"
                IsEditable="True"
                ItemsSource="{Binding Path=FilteredSource,  Source={StaticResource ItemsVM} ,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
                Text="{Binding   Path=Result, UpdateSourceTrigger=PropertyChanged}"                 
                DisplayMemberPath="{Binding  Path=Item.Name,  Source={StaticResource ItemsVM}}" >                 

                <ComboBox.Triggers>
                    <EventTrigger RoutedEvent="TextBoxBase.TextChanged">
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames   Storyboard.TargetProperty="IsDropDownOpen">
                                    <DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0" />
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </ComboBox.Triggers>
            </ComboBox>
        </DataTemplate>
    </Setter.Value>
</Setter>

1 个答案:

答案 0 :(得分:1)

您可以像为Source属性当前所做的那样设置每个绑定的ItemsSource

ItemsSource="{Binding Path=FilteredSource, Source={StaticResource ItemsVM}}"

如果不这样做,则框架将在FilteredSource的当前DataContext中寻找ComboBox属性。

顺便说一下,应将DisplayMemberPath属性设置为string,以指定ItemsSource中某项的属性名称:

DisplayMemberPath="Name"

您不应绑定到此属性。

UpdateSourceTrigger绑定的ItemsSource属性设置为PropertyChanged或将Mode设置为TwoWay也没有意义,因为将不会设置源属性。