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?
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
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ß
So müßte es funktionieren:
<TextBlock Width="50" Text="{Binding}" />
Weeks of programming can save you hours of planning