2017-07-04 5 views
0

Ich habe eine ComboBox, die ich an eine ObservableCollection<RadioButton> binden möchte. Allerdings möchte ich die ToolTip Eigenschaft in der ComboBox und nicht tatsächlich RadioButtons auflisten.Bind ComboBox Elemente zu Eigentum der Radiobutton-Liste wpf

Beispiel:

Wenn ich 3 RadioButtons mit ToolTips 1, 2 und 3. ich die ComboBox wünschen 3 Schnur Gegenstände enthalten, 1, 2 und 3.

Code:

Ausblick:

<ComboBox x:Name="LandmarkIdComboBox" Grid.Column="1" DisplayMemberPath="ToolTip" ItemsSource="{Binding Landmarks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
      SelectedItem="{Binding SelectedLandmark, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center" HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" VerticalContentAlignment="Center"/> 

Ansichtsmodell:

private ObservableCollection<RadioButton> m_landmarks = new ObservableCollection<RadioButton>(); 
private RadioButton m_selectedLandmark; 

public ObservableCollection<RadioButton> Landmarks 
{ 
    get => m_landmarks; 
    set 
    { 
     m_landmarks = value; 
     OnPropertyChanged(); 
    } 
} 
public RadioButton SelectedLandmark 
{ 
    get => m_selectedLandmark; 
    set 
    { 
     m_selectedLandmark = value; 
     OnPropertyChanged(); 
    } 
} 

den obigen Code verwenden kann ich die erwähnten 1,2 und 3 Artikel sehen, aber ich kann sie nicht auswählen kann. Ich nehme an, da es sich nicht um normale Artikel handelt, sondern um RadioButtons, wenn Sie also auf sie klicken, werden sie aktiviert/nicht geprüft und nicht ausgewählt.

Ich könnte eine zusätzliche Strruct/Class verwenden, um zu erreichen, was ich brauche, aber natürlich bevorzuge ich es nicht, wenn es einen anderen Weg gibt.

Also, gibt es einen anderen Weg?

+0

Entfernen Sie das 'MVVM'-Tag, da ViewModel die UI-Elemente NICHT kennen sollte. Und stattdessen, wenn Sie Tooltip sehen möchten, dann erstellen Sie eine Liste von Strings und füllen Sie sie aus den 'RadioButtons'. – XAMlMAX

Antwort

1

Nicht die Auswahl ist hier das Problem, sondern die Tatsache, dass RadioButton eine ContentControl ist. Dies bedeutet, dass Content angezeigt wird, wenn in einem ComboBox ausgewählt wird.

Sie können dieses Problem beheben, indem Sie eine benutzerdefinierte definieren ControlTemplate:

<ComboBox x:Name="LandmarkIdComboBox" Grid.Column="1" ItemsSource="{Binding Landmarks}" SelectedItem="{Binding SelectedLandmark}" 
      HorizontalContentAlignment="Center" HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" VerticalContentAlignment="Center"> 
    <ComboBox.Resources> 
     <Style TargetType="RadioButton"> 
      <Setter Property="Content" Value="{Binding ToolTip, RelativeSource={RelativeSource Self}}" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="RadioButton"> 
         <TextBlock Text="{TemplateBinding ToolTip}" /> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ComboBox.Resources> 
</ComboBox> 

eine ObservableCollection<RadioButton> in einer Ansicht Modell definieren bricht obwohl das MVVM Muster, aber ich glaube, dass Sie Ihre Gründe haben.

Verwandte Themen