Combobox选择项目绑定到GridViewColumn和GridViewColumn绑定到组合框选定项目

时间:2017-03-17 13:32:27

标签: c# wpf xaml combobox inotifypropertychanged

我正在尝试将我选择的组合框值=设置为文本框值。我希望只有在可能的情况下才能使用xaml。

<ListView x:Name="ExampleLV" ItemsSource="{Binding Data.Example1Collection}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Column1" DisplayMemberBinding="{Binding Values[0].Value}"/>
        </GridView>
    </ListView.View>
</ListView>

<ComboBox Name="ExampleCB" ItemsSource="{Binding Data.Example2Collection}" 
          SelectedItem="{Binding ElementName=ExampleLV, 
          Path=SelectedItem.Values[0].Value, Mode=TwoWay, 
          UpdateSourceTrigger=PropertyChanged}">
    <ComboBox.ItemContainerStyle>
         <Style TargetType="ComboBoxItem">
             <Setter Property="Tag" Value="{Binding ElementName=ExampleLV, Path=SelectedItem.Tag, Mode=TwoWay}"/>
         </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

问题不在于所选的列表项目没有更新,而是选择的组合框更新不会更新以匹配列表视图所选项目。

是的,Values [0] .Value具有INotifyPropertyChanged接口。

1 个答案:

答案 0 :(得分:0)

我还不知道你是否需要绑定到listview(问题主题)或文本框(问题正文)。以下是两种纯XAML解决方案:

xmlns:sys="clr-namespace:System;assembly=mscorlib"


    <StackPanel>
        <ListView x:Name="ExampleLV" SelectedValue="{Binding ElementName=Cbox, Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <ListView.ItemsSource>
                <x:Array Type="{x:Type sys:String}">
                    <sys:String>Test1</sys:String>
                    <sys:String>Test2</sys:String>
                    <sys:String>Test3</sys:String>
                </x:Array>
            </ListView.ItemsSource>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Column1"/>
                </GridView>
            </ListView.View>
        </ListView>

        <TextBox Text="{Binding ElementName=Cbox, Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>

        <ComboBox x:Name="Cbox">
            <ComboBox.ItemsSource>
                <x:Array Type="{x:Type sys:String}">
                    <sys:String>Test1</sys:String>
                    <sys:String>Test2</sys:String>
                    <sys:String>Test3</sys:String>
                </x:Array>
            </ComboBox.ItemsSource>                
        </ComboBox>
    </StackPanel>