Wpf ListView内部的ListView+控件。可见性

Wpf ListView内部的ListView+控件。可见性,wpf,listview,converter,visibility,Wpf,Listview,Converter,Visibility,我正在创建一个调查问卷应用程序。我的方法是创建一个包含问题文本的ListView和另一个包含ListAf Answers单选按钮的ListView。 当有一个问题有答案,而另一个问题需要一个文本框供用户输入一些文本时,问题就出现了。我怎样才能做到这一点?我的意思是,我想让文本框只有在答案集合中包含带有其他内容的RadioButton时才可见。 下面是我的ListView的xaml代码 <ListView SelectionChanged="myList_SelectionChanged"

我正在创建一个调查问卷应用程序。我的方法是创建一个包含问题文本的ListView和另一个包含ListAf Answers单选按钮的ListView。 当有一个问题有答案,而另一个问题需要一个文本框供用户输入一些文本时,问题就出现了。我怎样才能做到这一点?我的意思是,我想让文本框只有在答案集合中包含带有其他内容的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>
我不知道如何做到这一点。我不熟悉转换器。有人能给我一些提示吗?

首先添加一个值转换器:


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

<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,如果它是其他的,只需将Radio的内容设置为空字符串,并将文本框的可见性设置为Visible即可显示它。此文本框将显示在单选按钮的右侧。

太好了,它工作正常。我想我应该再问一个问题,但你可以帮我。我想禁用/启用此文本框,而您称之为“radio”的单选按钮是否选中。你也能帮我吗?别担心,我知道了。再次非常感谢。看起来很不错,但我还没试过,因为第一个解决方案满足了我的需要,所以我把第一个标记为答案。谢谢你的回答。
<TextBox Visibility="{Binding Path=listOfAnswer, Converter={AnswerCollectionToVisibilityConverter}}" />
<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>