如果(未)选择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因为他找不到这个类: - (
答案 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>