2016-12-13 20 views
0

私はWpfで新しく、リストボックスで選択した項目を取得する際に問題に直面します リストボックスとテキストボックスを持つ単純なxamlを作成しました。 バインディングを使用して、後で使用したいトリガー(チェックされているかどうかなど)を含むリストボックスに値を設定します。リストボックスバインディング選択項目の値を取得

XAMLコード:

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

の背後にあるコードで

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

lisboxが正しく読み込まれます。私の質問は:選択された値のアイテムを取得するための正しいコードは何ですか。私は質問がそれほど明確か答えは明白ではなかった怖いが、私は答えを投稿サポート

+0

明確にするために、現在のバインディングはリストボックスアイテムオブジェクトを返します。だから私はそれを単純なテキスト(選択された項目の文字列)に変換する必要があります – GcH

答えて

0

ため

多くのおかげで、それは助けることができる:

可能な答え:

var selected = LstB_Checklist.SelectedItem as LstB_Item; 
txtb_Selection.Text = selected.Title; 
関連する問題