2011-12-20 9 views
0

私はListBoxに基づくユーザーコントロールを持っています。 DataTemplateはCanvasで表示または非表示にできます。 ユーザーがListBoxItemをクリックして(キャンバスを表示する) を選択し、別のクリックでキャンバスを非表示にする必要があります。ListBoxItemデータを項目IsSelectedプロパティで変更する

私は表示/ Aコンバータを使用するには、ListBoxItem IsSelectedに応じ

がどのように私は私のデータオブジェクト(デバイス)を変更することができます(下記参照デバイス)私のデータオブジェクトに応じてキャンバスを非表示にするには? (それは項目の間でトグルする必要がある= trueを選択し、偽=選択し、別のクリック)

おかげで、アビ

のDataTemplate:

<DataTemplate x:Key="ItemTemplate"> 
     <StackPanel> 
      <TextBlock Text="{Binding Name}" FontSize="12" Margin="3"/>      
      <TextBlock Text="{Binding Location}" FontSize="10" Margin="1"/> 
      <Canvas x:Name="canvas1" 
       Visibility="{Binding SelectedToggle, Converter={StaticResource MYVisabilityConverter}}" 
       IsHitTestVisible="False" > 
       <Image Source="/Resources/Images/Bubble.png" Width="100"/> 
      </Canvas> 

     </StackPanel>            

に結合するオブジェクトDataTemplate:

public class Device : Notifier 
{ 

    public Device() 
    {   
    } 

    public Device(string name) 
    { 
     this.Name = name;   
    } 

    private Point location; 
    /// <summary> 
    /// the device location 
    /// </summary> 
    public Point Location 
    { 
     get { return location; } 
     set { location = value; OnPropertyChanged("Location"); } 
    } 

    string name; 
    /// <summary> 
    /// the device Name 
    /// </summary> 
    public string Name 
    { 
     get { return name; } 
     set { name = value; OnPropertyChanged("Name"); } 
    } 


    bool selectedToggle = false; 
    /// <summary> 
    /// toggle between select and Un select of the device 
    /// </summary> 
    public bool SelectedToggle 
    { 
     get { return selectedToggle; } 
     set { selectedToggle = value; OnPropertyChanged("SelectedToggle"); } 
    } 

} 

答えて

0

DataTempla ListBoxコントロールのItemTemplateにあるTEあなたが投稿、あなたがあなたのViewModelにIsSelectedの値を保持したい場合は、私はListBoxItemのスタイルセッターを使用したいListBoxItemのIsSelected

<Canvas x:Name="canvas1" 
     IsHitTestVisible="False" 
     Visibility="{Binding 
      RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, 
      Path=IsSelected, 
      Converter={StaticResource MYVisabilityConverter}}"> 

</Canvas> 

を取得するために結合RelativeSourceを使用することができます。

<Style TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="IsSelected" Value="{Binding SelectedToggle}" /> 
</Style> 
+0

こんにちはRachelさん、SelectedToggleをいくつかの方法で変更する必要があるので、この解決策には問題があります。私が考えることのできる場所はVisabilityConverterクラスですが、どのようにデバイスアイテムを渡すのですか? (私はListBoxItemを渡すことができます)。 – Avi

+0

@Aviこれはあなたが投稿した 'DataTemplate'が' ListBoxItems'のものであると仮定しています。そうであれば、私の答えにStyleを使って 'ListBoxItem.IsSelected'を' ToggleSelected'にバインドすることができます。いつでも 'ListBoxItem'を選択すると' ToggleSelected'プロパティがトグルされます。 – Rachel

関連する問題