首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListView inside + control.Visibility

ListView inside + control.Visibility
EN

Stack Overflow用户
提问于 2014-11-21 08:56:20
回答 2查看 438关注 0票数 0

我正在创建一个问卷调查应用程序。我这样做的方法是创建一个包含问题文本的ListView和另一个包含列表af答案的ListView (作为RadioButtons)。这个问题出现时,有一个问题,其中有一个“其他”的答案,需要一个TextBox的用户键入一些文本。我怎样才能做到这一点?我的意思是,只有当答案集合包含内容为"Other“的TextBox时,我才希望使RadioButton可见。下面是我的ListView xaml代码。

代码语言:javascript
运行
复制
<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>

我不知道如何做到这一点。我对转换器不熟悉。有人能给我点提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 10:33:46

您需要一些触发器来显示/隐藏TextBox,如下所示:

代码语言:javascript
运行
复制
<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的右边。

票数 0
EN

Stack Overflow用户

发布于 2014-11-21 10:33:33

首先添加一个ValueConverter

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<TextBox Visibility="{Binding Path=listOfAnswer, Converter={AnswerCollectionToVisibilityConverter}}" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27057451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档