2016-12-13 1 views
0

Je suis nouveau dans Wpf et je fais face à problème pour obtenir l'élément sélectionné dans la liste J'ai créé un simple xaml avec une zone de liste et une zone de texte. J'utilise la reliure pour remplir ma listbox incluant le trigger (coché ou non) que je veux utiliser plus tard.Liaison Listbox obtenir la valeur de l'élément sélectionné

Code Xaml:

<ListBox x:Name="LstB_Checklist" HorizontalAlignment="Left" Height="190" Margin="39,45,0,0" VerticalAlignment="Top" Width="275" Background="#FF363636" BorderBrush="{x:Null}" FontSize="18" Foreground="White" BorderThickness="2" SelectionChanged="LstB_Checklist_SelectionChanged" SelectedItem="{Binding SelectedProperty,Mode=TwoWay}" > 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True" > 
         <Setter Property="FontWeight" Value="Bold" /> 
         <Setter Property="Background" Value="#FFFFDC00" /> 
         <Setter Property="Foreground" Value="Black" /> 
        </Trigger> 
       </Style.Triggers> 
       <Style.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGray"/> 
       </Style.Resources> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image> 
         <Image.Style> 
          <Style TargetType="{x:Type Image}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding Checked}" Value="false"> 

            </DataTrigger> 
            <DataTrigger Binding="{Binding Checked}" Value="true"> 

            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </Image.Style> 
        </Image> 

        <TextBlock Text="{Binding Path=Title, Mode=TwoWay}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <TextBox x:Name="txtb_Selection" HorizontalAlignment="Left" Height="23" Margin="60,264,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 

dans le code derrière

public MainWindow() 
    { 
     InitializeComponent(); 
     List<LstB_Item> items = new List<LstB_Item>(); 
     items.Add(new LstB_Item() { Title = "Items 1", Checked = false }); 
     items.Add(new LstB_Item() { Title = "Items 2", Checked = false }); 
     items.Add(new LstB_Item() { Title = "Items 3", Checked = false }); 
     LstB_Checklist.ItemsSource = items; 
    } 

    public class LstB_Item : INotifyPropertyChanged 
    { 
     public string Title { get; set; } 

     private bool _checked; 

     public bool Checked 
     { 
      get { return _checked; } 
      set { _checked = value; NotifyPropertyChanged(); } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
     private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private void LstB_Checklist_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     txtb_Selection.Text = LstB_Checklist.SelectedItem.ToString(); 
    } 

Le lisbox est rempli correctement. Ma question est: Quel est le bon code pour obtenir l'élément de valeur sélectionnée.

Un grand merci pour le soutien

+0

Pour clarifier, la liaison en cours renvoie un objet élément de la liste. J'ai donc besoin de le convertir en texte simple (chaîne d'éléments sélectionnés) – GcH

Répondre

0

Je crains que la question n'a pas été si claire ou la réponse évidente, mais je posterai une réponse, il pourrait aider:

Réponse possible:

var selected = LstB_Checklist.SelectedItem as LstB_Item; 
txtb_Selection.Text = selected.Title;