Отображать элементы в раскрывающемся списке и окне выбранных элементов через одну и ту же привязку, используя только XAML - PullRequest
0 голосов
/ 04 июля 2018

Я уверен, что кто-то будет перепрыгивать через все это, поскольку ему отвечают где-то в другом месте, но я утверждаю, что перешел по каждой соответствующей ссылке на этом сайте (и в других местах) и перепробовал все возможные комбинации ItemTemplate, ComboBoxItem, ItemContainerStyle, DisplayMemberPath, SelectedItem , SelectedValuePath и SelectedValue, и на всю жизнь я не могу заставить это работать так, как нужно.

Я просто хочу определить список объекта ContentControl (используя x: Array) в ресурсах XAML, используемых в качестве ItemsSource для ComboBox. Этот список содержит 2 элемента, свойство Content которых установлено на элемент управления Grid, также определенный в ресурсах. Каждый элемент также имеет свойство Tag, установленное в строку, которая функционирует как имя или описание содержимого.

Очень просто: я хочу, чтобы строка в свойстве Tag отображалась в выбранной части элемента ComboBox и в виде списка выбираемых элементов в раскрывающейся части ComboBox.

Если я установлю DisplayMemberPath = "Tag", то раскрывающаяся часть работает как нужно, но ничего не отображается в выбранной части элемента ComboBox. Я уверен, что правильное использование SelectedValuePath и SelectedValue является ключом, но я просто не могу заставить его работать.

    <UserControl.Resources>
    <Grid x:Key="Fluidics" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" MinWidth="134"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Content="Cartridge:" 
                            VerticalAlignment="Center" HorizontalAlignment="Left" 
                            Margin="0,5,0,0" Height="26" Width="62"/>
        <ComboBox Grid.Column="1" 
                            ItemsSource="{Binding Cartridges}"
                            SelectedIndex="{Binding SelectedCartridgeIndex, FallbackValue=0}"
                            SelectedItem="{Binding SelectedCartridge}"
                            Margin="0,5,0,0" >
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Config.FriendlyName}" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        <views:FluidicsExperimentParamsView Grid.Row="1" Grid.ColumnSpan="2" DataContext="{Binding FluidicsExperimentParams}" Margin="0,10,0,0"/>
    </Grid>
    <Grid x:Key="Data acquisition" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" MinWidth="157"/>
            <ColumnDefinition Width="Auto" MinWidth="87"/>
        </Grid.ColumnDefinitions>
        <Label Content="Camera line:" />
        <ComboBox 
                            Grid.Column="1"
                            IsReadOnly="True"
                            ItemsSource="{Binding ImageDataAcquisitionParams}"
                            SelectedIndex="{Binding SelectedCameraLine}"
                            SelectedItem="{Binding SelectedImageDataAcquisitionParams}"/>
        <data:ImageDataAcquisitionView
                            Grid.Row="1"
                            Grid.ColumnSpan="2"
                            DataContext="{Binding ImageDataAcquisition}" Margin="0,10,0,0"/>
    </Grid>
    <x:Array x:Key="ControlActivities" Type="ContentControl">
        <ContentControl Content="{Binding Source={StaticResource Fluidics}}" Tag="Fluidics" />
        <ContentControl Content="{Binding Source={StaticResource Data acquisition}}" Tag="Data acquisition"/>
    </x:Array>
</UserControl.Resources>

...

<ComboBox Name="ControlActivityComboBox" 
          MinWidth="150" 
          ItemsSource="{Binding Source={StaticResource ControlActivities}}" 
          SelectedItem="{Binding SelectedActivity}"
          SelectedValuePath="Tag"
          SelectedValue="{Binding SelectedActivity.Tag}"
          DisplayMemberPath="Tag"
          HorizontalAlignment="Left"
          SelectedIndex="0">
</ComboBox>
...