从ListviewItem绑定到数据上下文中的属性

时间:2013-09-09 06:57:55

标签: wpf xaml listview data-binding

我有一个MyViewModel形式的数据上下文。

MyViewModel有一个属性:public int MyWidth

对于listview中的每个,即ListViewItem,我需要显示宽度等于MyWidth的画布。

我的listView将ItemSource绑定到名为MyCollectionOf Ints 的属性。

您可能已经猜到,其定义如下:ObservableCollection<int>

精明的读者可能已经意识到,myListView的数据上下文是int,因此在尝试从int类型数据上下文绑定不存在的MyWidth属性时失败。

需要什么样的理论疯狂约束来让这种坚果才能发挥作用?

我最近的尝试是使用RelativeSource进行绑定,但无法完全弄明白......

我的列表查看:

<ListView Name="MyListView" ItemsSource="{Binding MyCollectionOfInts}"

列表视图中的我的项目。

  <ListView.View>
    <GridView>
      <GridView.Columns>
        <GridViewColumns Header=MyInts">
          <GridViewColumn.CellTemplate>
            <DataTemplate>
              <Label Name="m_TestLabel" Content="ASDF" />
                <TextBox Text="{Binding Path=MyWidth, RelativeSource=????{RelativeSource AncestorType={x:Type MyViewModel}}}"/>
            </DataTemplate>
</...a bunch of close brackets>

我的列表视图Item是一个int,但我想得到Control的原始数据上下文,即。 myViewModel,并将ListViewItem的画布宽度绑定到myViewModel的MyWidth属性。如何让ListViewItem识别控件的数据上下文?

注意:我真的不想为ListView创建一个容器并在其中存储静态MyWidth变量,但如果这是唯一的方法,请告诉我。我希望不是。

2 个答案:

答案 0 :(得分:1)

试试这个:

<TextBox Text="{Binding Path=DataContext.MyWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>

如果您的View是usercontrol,则使用类型

中的Window

答案 1 :(得分:0)

<TextBox Text="{Binding Path=DataContext.MyWidth, 
RelativeSource={RelativeSource AncestorType={x:Type ListView }}}"/>

或者

<TextBox Text="{Binding Path=DataContext.MyWidth, 
 Source={x:Reference MyListView}"/>