1

MyViewModel の形式のデータ コンテキストがあります。

MyViewModel にはプロパティがあります: public int MyWidth.

リストビューの各項目、つまり ListViewItem に対して、幅が MyWidth のキャンバスを表示する必要があります。

私の listView には、 MyCollectionOf Intsというプロパティにバインドされた ItemSource があります。

ご想像のとおり、これは次の定義のものです: 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 ですが、コントロールの元のデータ コンテキストを取得したいと考えています。myViewModel を作成し、ListViewItem のキャンバス幅を myViewModel の MyWidth プロパティにバインドします。ListViewItem にコントロールのデータ コンテキストを認識させるにはどうすればよいですか?

注: ListView のコンテナーを作成して静的な MyWidth 変数を格納したくはありませんが、それが唯一の方法である場合は、お知らせください。そうではないことを願っています。

4

2 に答える 2

2

これを試して:

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

View が 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 に答える