Listbox DataTemplate очистить текстовое поле при выборе

1

Для моего ListBox меня есть DataTemplate:

<DataTemplate x:Key="lbTemplate" DataType="{x:Type ListBoxItem}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="6*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="{Binding Naam, Mode=OneWay}" VerticalAlignment="Center" />
        <TextBox TextAlignment="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}},
            Path=IsSelected, Converter={StaticResource BoolToAlignment}}"
            Text="{Binding Path=Aantal, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, TargetNullValue=0}"
    </Grid>
</DataTemplate>

К каким свойствам относятся:

public class menuItem
{
    public int? Aantal { get; set; }
    public string Naam { get; set; }
}

Как очистить значение TextBox если выбран соответствующий ListBoxItem не теряя привязки к Aantal? имущество?

Теги:
wpf
data-binding

1 ответ

3
Лучший ответ

Используйте Style с DataTrigger:

<Style TargetType="TextBox" x:Key="tbStyle">
    <Setter Property="Text" >
        <Setter.Value>
            <Binding Path="Aantal" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" />
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}},
                            Path=IsSelected}" Value="True">
            <Setter Property="Text" Value="{x:Null}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

РЕДАКТИРОВАТЬ

Для сброса (очистки), связанный Aantal свойства после выбора ListBoxItem:

Добавьте флаг IsSelected в класс item, привяжите его к свойству ListBoxItem.IsSelected, добавив в свой ListBox следующий стиль:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="IsSelected" Value="{Binding IsSelected}" />
    </Style>
</ListBox.ItemContainerStyle>

Затем в IsSelected setter добавьте код: if (value) { this.Aantal = ""; } if (value) { this.Aantal = ""; }

  • 0
    Это работает, но теперь мое свойство не изменяется при вводе нового значения и отмене ListBoxItem ? ..
  • 0
    Не уверен, что вы имеете в виду ... Какая недвижимость? Вы хотите, чтобы ваше свойство Aantal было установлено в null (или String.Empty ) при отмене ListBoxItem ?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню