在WPF中选择ListViewItem时启用TextBox(数据绑定)

时间:2011-03-06 16:20:51

标签: wpf data-binding listview binding textbox

如果(未)选择ListViewItem,如何在WPF中启用/禁用带DataBinding的TextBox?

我创建了一个转换器类:

public class BoolConvert : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

并将属性添加到TextBox:

IsEnabled="{Binding SelectedItem, ElementName=listViewCards, Converter={StaticResource BoolConvert}}"

但我有一个XamlParseException因为他找不到这个类: - (

3 个答案:

答案 0 :(得分:3)

您可以在TextBox上使用样式触发器,无需使用ValueConverter:

<TextBox>
   <TextBox.Style>
     <Style TargetType="{x:Type TextBox}">
       <Setter Property="IsEnabled" Value="False"/>
       <Style.Triggers>
         <DataTrigger Binding="{Binding ElementName=lvItems, Path=SelectedItem}" Value="{x:Null}">
           <Setter Property="IsEnabled" Value="True"/>
         </DataTrigger>
       </Style.Triggers>
     </Style>
   </TextBox.Style>
</TextBox>
<ListView Name="lvItems" .../>

答案 1 :(得分:2)

您可以将IsEnabled上的TextBox属性绑定到SelectedItem上的ListView媒体资源。然后你需要一个转换器(IValueConverter的实现)来将选定的值转换为布尔值。

<TextBox IsEnabled="{Binding SelectedItem, ElementName=listView, Converter={StaticResource MyConverter}}"/>
<ListView x:Name="listView" .../>

然后,在您的转换器中:

public object Convert(object value, ...)
{
    return value == null;
}

答案 2 :(得分:2)

ListView中的ListViewItem:

如果选择则启用。 请尝试以下方法:

<ListViewItem Margin="5" Background="AliceBlue">
    <TextBox Margin="5" Text="Lösung SECHS" 
        IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}"/>
</ListViewItem>