我有一个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变量,但如果这是唯一的方法,请告诉我。我希望不是。
答案 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}"/>