ListView里面的ListView + control.Visibility
Posted
技术标签:
【中文标题】ListView里面的ListView + control.Visibility【英文标题】:ListView inside ListView + control.Visibility 【发布时间】:2015-01-19 08:50:08 【问题描述】:我正在创建一个问卷调查应用。我这样做的方法是创建一个包含问题文本的 ListView 和另一个包含答案列表的 ListView(作为 RadioButtons)。 当有一个问题的答案是“其他”时,问题就来了,需要一个文本框让用户输入一些文本。我怎样才能做到这一点?我的意思是我想让 TextBox 仅在答案集合包含内容为“其他”的 RadioButton 时才可见。 下面是我的 ListView 的 xaml 代码。
<ListView SelectionChanged="myList_SelectionChanged" ItemsSource="Binding OCquestions">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="20 0 20 0">
<TextBlock Text="Binding Path=questionText"/>
<ListView Name="ListaLista" SelectionChanged="myList_SelectionChanged" ItemsSource="Binding Path=listOfAnswer">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton GroupName="Binding Path=questId" Content="Binding Path=answerText" Checked="RadioButton_Checked"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
// HERE I WANT A TEXTBOX WHICH IS VISIBLE ONLY WHEN listOfAnswer collection contain a RadioButton with Content "Others"
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我不知道如何实现这一点。我对转换器不熟悉。谁能给我一些提示?
【问题讨论】:
【参考方案1】:您需要一些触发器来显示/隐藏文本框,如下所示:
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton GroupName="Binding Path=questId"
Content="Binding Path=answerText"
Checked="RadioButton_Checked" Name="radio"/>
<TextBox Name="other" Visibility="Collapsed"/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="Binding answerText" Value="Other">
<Setter TargetName="radio" Property="Content" Value=""/>
<Setter TargetName="other" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
您可以看到DataTrigger
监听answerText
,如果是"Other"
,只需将Radio 的内容设置为空字符串并将TextBox 的Visibility 设置为Visible
即可显示。此 TextBox 将显示在 RadioButton 的右侧。
【讨论】:
太好了,效果很好。我想我应该问另一个问题,但你可以帮助我。我想禁用/启用这个文本框,而你称为“收音机”的这个单选按钮是否被选中。你能帮我解决这个问题吗? 没关系,我想通了。再次非常感谢您。【参考方案2】:首先添加一个ValueConverter
:
public abstract class BaseConverter : MarkupExtension
public override object ProvideValue(IServiceProvider serviceProvider)
return this;
public class AnswerCollectionToVisibilityConverter : BaseConverter, IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
ICollection<ListOfAnswers> answers = value as ICollection<ListOfAnswers>;
if (answers != null)
foreach (Answer answer in answers)
if (OtherRadioButtonIsHere)
return Visibility.Visible;
return Visibility.Collapsed;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
return null;
然后添加一个TextBox
,它使用ValueConverter
来设置Visibility
:
<TextBox Visibility="Binding Path=listOfAnswer, Converter=AnswerCollectionToVisibilityConverter" />
【讨论】:
嗯,它看起来非常好,但我没有尝试过,因为第一个解决方案满足了我的需求,所以我首先标记为答案。谢谢你的回答。以上是关于ListView里面的ListView + control.Visibility的主要内容,如果未能解决你的问题,请参考以下文章
在ListView里面flutter两个ListView.builder
ListView里面的ListView + control.Visibility
Flutter:ListView 里面的 ListView.builder