我正在创建一个问卷调查应用程序。我这样做的方法是创建一个包含问题文本的ListView和另一个包含列表af答案的ListView (作为RadioButtons)。这个问题出现时,有一个问题,其中有一个“其他”的答案,需要一个TextBox的用户键入一些文本。我怎样才能做到这一点?我的意思是,只有当答案集合包含内容为"Other“的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>
我不知道如何做到这一点。我对转换器不熟悉。有人能给我点提示吗?
发布于 2014-11-21 10:33:46
您需要一些触发器来显示/隐藏TextBox,如下所示:
<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"
,只需将收音机的内容设置为空字符串,并将TextBox的可见性设置为Visible
来显示它。这个TextBox将显示在RadioButton的右边。
发布于 2014-11-21 10:33:33
首先添加一个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}}" />
https://stackoverflow.com/questions/27057451
复制相似问题