Laden...

Wie im Popup einer Combobox das selektierte Item mit zusätzlichem Text/Symbol anzeigen?

Erstellt von CodeF vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.189 Views
C
CodeF Themenstarter:in
12 Beiträge seit 2020
vor 4 Jahren
Wie im Popup einer Combobox das selektierte Item mit zusätzlichem Text/Symbol anzeigen?

Hi,

ich möchte im Popup einer Combobox das selektierte Item mit einem zusätzlichen Text/Symbol anzeigen.

Dazu müsste ich aber im ItemTemplate einen TextBlock an einen Item einer Collection binden. K.a. ob das geht, hier der Code:


      <ComboBox
            Grid.Row="1"
            Grid.Column="1"
            Margin="5,5,5,5"
            ItemsSource="{Binding AvailableBaudrates}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Width="50" Text="{Binding AvailableBaudrates}" />
                        <TextBlock x:Name="Column2" Text="X" />
                    </StackPanel>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}, Path=IsSelected}" Value="True">
                            <Setter TargetName="Column2" Property="Visibility" Value="Visible" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}}" Value="{x:Null}">
                            <Setter TargetName="Column2" Property="Visibility" Value="Hidden" />
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

und


 public class ComPortEdit
    {
        int[] baudrate = new int[] { 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600 };
        int[] databits = new int[] { 5, 6, 7, 8 };

        private ObservableCollection<int> availableBaudrates;

        public ObservableCollection<int> AvailableBaudrates
        {
            get
            {
                return availableBaudrates ?? (availableBaudrates = GetBaudrates());
            }
            set
            {
                availableBaudrates = value;
            }
        }

 private ObservableCollection<int> GetBaudrates()
        {
            var b = new ObservableCollection<int>();
            foreach (int i in baudrate)
            {
                b.Add(i);
            }
            return b;
        }


Die ItemSource der Combobox erwartet ja eine Collection, die Bindung des TextBlocks einen String.

Dieser String ist ja aber ein Item in der Collection. Wie krieg ich das hin?

5.657 Beiträge seit 2006
vor 4 Jahren

Binde den TextBlock halt nicht an die Collection sondern an die Eigenschaft mit dem Text. Hier gibt es Beispiele: [Artikel] MVVM und DataBinding, Strg-F "DataTemplate"

Weeks of programming can save you hours of planning

C
CodeF Themenstarter:in
12 Beiträge seit 2020
vor 4 Jahren

Hallo,

im Grunde würde nachfolgender Code funktionieren, ich bräuchte aber nicht PreviousData sonder CurrentData.

Wie kann ich darauf zugreifen?


<TextBlock Width="50" Text="{Binding RelativeSource={RelativeSource Mode=PreviousData}}" />

Gruß

5.657 Beiträge seit 2006
vor 4 Jahren

So müßte es funktionieren:


<TextBlock Width="50" Text="{Binding}" />

Weeks of programming can save you hours of planning