イメージ的には以下のようにしたいのですがバインディングされません。
どのようにしたらよいのでしょうか?
#サンプルコード
XAML
1<ListView Height="100" Width="200"> 2 <ListView.View> 3 <GridView> 4 <GridViewColumn Width="100"> 5 <GridViewColumnHeader Content="項目1"/> 6 <GridViewColumn.CellTemplate> 7 <DataTemplate > 8 <TextBlock Text="{Binding ElementName=B, Path=Text}"/> 9 </DataTemplate> 10 </GridViewColumn.CellTemplate> 11 </GridViewColumn> 12 <GridViewColumn Width="100"> 13 <GridViewColumnHeader Content="項目2" /> 14 <GridViewColumn.CellTemplate> 15 <DataTemplate> 16 <TextBox x:Name="B" /> 17 </DataTemplate> 18 </GridViewColumn.CellTemplate> 19 </GridViewColumn> 20 </GridView> 21 </ListView.View> 22</ListView>
#追記
例えば、以下に示したデータを適当に入れて項目を生成しておきます。
TextBoxに何か入力したら左側の項目1のTextBlockに同じテキストを表示するようにしたいのですがこの記述(ElmentNameでの指定)ではうまくいかないようです。
よくよく考えれば列ごとに同じNameが設定されるのでできない理由はなんとなくわかるのですが・・。
いろいろ調べて他にRelativeSourceなど試してみましたがこちらでは対応できないようでした。
XAML
1<Grid> 2 <Grid.Resources> 3 <XmlDataProvider x:Key="test" XPath="/test/item" > 4 <x:XData> 5 <test xmlns=""> 6 <item foo="hoge"/> 7 <item foo="piyo"/> 8 </test> 9 </x:XData> 10 </XmlDataProvider> 11 </Grid.Resources> 12 <ListView Height="100" Width="200" ItemsSource="{Binding Source={StaticResource test}}"> 13 <ListView.View> 14 <GridView> 15 <GridViewColumn Width="100"> 16 <GridViewColumnHeader Content="項目1"/> 17 <GridViewColumn.CellTemplate> 18 <DataTemplate > 19 <TextBlock Text="{Binding ElementName=B, Path=Text}"/> 20 </DataTemplate> 21 </GridViewColumn.CellTemplate> 22 </GridViewColumn> 23 <GridViewColumn Width="100"> 24 <GridViewColumnHeader Content="項目2"/> 25 <GridViewColumn.CellTemplate> 26 <DataTemplate> 27 <TextBox x:Name="B" Text="{Binding XPath=@foo, UpdateSourceTrigger=PropertyChanged}"/> 28 </DataTemplate> 29 </GridViewColumn.CellTemplate> 30 </GridViewColumn> 31 </GridView> 32 </ListView.View> 33 </ListView> 34</Grid> 35
偶然↑のコード書いてて気が付いたのですが以下のようにTextBlockに「{Binding XPath=@foo}」を指定すればうまくいきました。
しかし、StyleやContextMenuなどオブジェクトを指定するようなプロパティの場合その方法ではうまくいかないようでした。
そもそもXPathでのやり方は何か違う?ような気が・・・、かと言ってElementNameでの指定も無理がありそうですし・・・。
XAML
1<Grid> 2 <Grid.Resources> 3 <XmlDataProvider x:Key="test" XPath="/test/item" > 4 <x:XData> 5 <test xmlns=""> 6 <item foo="hoge"/> 7 <item foo="piyo"/> 8 </test> 9 </x:XData> 10 </XmlDataProvider> 11 <Style TargetType="TextBox" x:Key="c"> 12 <Setter Property="ContextMenu"> 13 <Setter.Value> 14 <ContextMenu> 15 <MenuItem Header="1"/> 16 </ContextMenu> 17 </Setter.Value> 18 </Setter> 19 </Style> 20 </Grid.Resources> 21 <ListView Height="100" Width="200" ItemsSource="{Binding Source={StaticResource test}}"> 22 <ListView.View> 23 <GridView> 24 <GridViewColumn Width="100"> 25 <GridViewColumnHeader Content="項目1"/> 26 <GridViewColumn.CellTemplate> 27 <DataTemplate > 28 <TextBlock Text="{Binding XPath=@foo}" ContextMenu="{Binding ElementName=B, Path=ContextMenu, Mode=OneWay}"/> 29 </DataTemplate> 30 </GridViewColumn.CellTemplate> 31 </GridViewColumn> 32 <GridViewColumn Width="100"> 33 <GridViewColumnHeader Content="項目2"/> 34 <GridViewColumn.CellTemplate> 35 <DataTemplate> 36 <TextBox x:Name="B" Text="{Binding XPath=@foo, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource c}"/> 37 </DataTemplate> 38 </GridViewColumn.CellTemplate> 39 </GridViewColumn> 40 </GridView> 41 </ListView.View> 42 </ListView> 43</Grid>

回答2件
あなたの回答
tips
プレビュー