如何在WPF中的ListView中绑定ContentTemplate

时间:2016-02-23 09:16:53

标签: wpf binding win-universal-app windows-10-universal contenttemplate

我已经简化了一些问题,但是我还需要在仍然绑定到ListView ItemSource的同时更改ListView项的样式和ControlTemplate。

这是我的ListView定义:

<ListView x:Name="MyListView"
          ItemsSource="{Binding ListOfStrings}"
          ItemContainerStyle="{StaticResource MyListViewItemStyle}"/>

ItemContainerStyle:

<Style x:Key="MyListViewItemStyle" TargetType="ListViewItem">
     <Setter Property="Template">
          <Setter.Value>
               <ControlTemplate TargetType="ListViewItem">
                    <DataTemplate>
                         <TextBlock x:Name="txtValue" Text="{Binding Mode=TwoWay}" />
                    </DataTemplate>
               </ControlTemplate>
          </Setter.Value>
     </Setter>
</Style>

ListView的ItemSource类型为:List<string>

我需要TextBlock(txtValue)来通过绑定到ItemSource来显示一个项目。

ListView包含正确数量的项目,但如何绑定TextBlock?

  

我需要在WPF通用Windows平台应用程序中执行此操作。一世   在普通的WPF Windows应用程序和代码中测试了相同的代码   工作正常。但是在ContentTemplate的UWP应用程序中   没有正确绑定。

我确信我错过了一些简单的事情。

2 个答案:

答案 0 :(得分:0)

试试这个:

<Style x:Key="MyListViewItemStyle" TargetType="ListViewItem">
 <Setter Property="Template">
      <Setter.Value>
           <ControlTemplate TargetType="ListViewItem">
                     <TextBlock x:Name="txtValue" Text="{Binding }" />
           </ControlTemplate>
      </Setter.Value>
 </Setter>

双向绑定需要Path或XPath。

“模板内容”部分的根不能包含“System.Windows.DataTemplate”类型的元素。只有FrameworkElement和FrameworkContentElement类型有效。

答案 1 :(得分:0)

找到解决方案here。仍然试图弄清楚它为什么会起作用,但确实如此。