Изменение данных ListBoxItem в соответствии с элементом IsSelected Property - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть пользовательский элемент управления, основанный на ListBox. этот DataTemplate с Canvas, который можно показать или скрыть. когда пользователь нажимает на ListBoxItem, он должен быть выбран (показать холст) и еще один щелчок должен скрыть холст.

Я использую конвертер, который показывает / скрывает холст в соответствии с моим объектом данных (устройство, см. Ниже)

как я могу изменить свой объект данных (устройство) в соответствии с ListBoxItem IsSelected? (он должен переключаться между элементом select = true и другим щелчком select = false)

спасибо, Ави

шаблон данных:

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

}

1 Ответ

0 голосов
/ 20 декабря 2011

Предполагая, что размещенный вами DataTemplate является ItemTemplate ListBox, вы можете использовать привязку RelativeSource для получения значения IsSelected ListBoxItem

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

</Canvas>

Если вы хотите сохранить значение IsSelected в вашей ViewModel, я бы использовал установщик стиля для ListBoxItem.

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