2016-12-13 62 views
0

我是新的Wpf和我面临的问题,以获得列表框中的选定项目 我创建了一个简单的XAML与一个列表框和一个文本框。 我使用绑定来填充我的列表框,包括我以后不想使用的触发器(选中或不选)。列表框绑定获取选定的项目值

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"/> 
在代码

后面

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

的lisbox被正确填充。我的问题是:什么是正确的代码来获取价值选择项目。

的支持非常感谢

+0

为了澄清,当前绑定返回一个列表框项目对象。所以我需要将其转换为简单的文本(选定的项目字符串) – GcH

回答

0

恐怕问题不是那么清楚或答案很明显,但我张贴的答案,它可以帮助:

可能的答案:

var selected = LstB_Checklist.SelectedItem as LstB_Item; 
txtb_Selection.Text = selected.Title; 
相关问题