2016-12-13 5 views
0

Ich bin neu in Wpf und ich Gesicht Problem, um ausgewählte Artikel in Listbox Ich habe eine einfache Xaml mit einer Listbox und einem Textfeld erstellt. Ich verwende Binding, um meine Listbox einschließlich Trigger (aktiviert oder nicht) zu füllen, die ich später verwenden möchte.Listbox Bindung erhalten ausgewählten Artikel Wert

XAML-Code:

<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"/> 

im Code hinter

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(); 
    } 

Die lisbox korrekt ausgefüllt. Meine Frage ist: Was ist der richtige Code, um den Wert ausgewählten Artikel zu bekommen.

Vielen Dank für die Unterstützung

+0

Um zu verdeutlichen, gibt die aktuelle Bindung ein Listbox-Objekt zurück. Also muss ich es in einfachen Text konvertieren (ausgewählte Items String) – GcH

Antwort

0

Ich fürchte, die Frage ist nicht so klar, oder die Antwort offensichtlich war, aber ich schreibe eine Antwort, es könnte helfen:

Mögliche Antwort:

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