1

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

MyViewModel 有一个属性:public int MyWidth

对于列表视图中的每个项目,即 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>

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

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

4

2 回答 2

2

尝试这个:

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

如果您的视图是用户控件,则在类型中使用 Window

于 2013-09-09T07:06:35.033 回答
0
<TextBox Text="{Binding Path=DataContext.MyWidth, 
RelativeSource={RelativeSource AncestorType={x:Type ListView }}}"/>

或者

<TextBox Text="{Binding Path=DataContext.MyWidth, 
 Source={x:Reference MyListView}"/>
于 2013-09-09T07:07:22.357 回答