/ / wpfの親usecontrolのオブジェクトを取得する方法 - c#、wpf、xaml、mvvm、relativesource

wpf - c#、wpf、xaml、mvvm、relativesourceで親usecontrolのオブジェクトを取得する方法

私はユーザーコントロールを作成して言うことができますUserControl1。私はUserControl1のオブジェクトとボタンにバインドされたデータをコンバーターに渡すために、子コントロールボタンをクリックします。コマンド実行にMVVMパターンを使用しています。

User ControlのXamlファイルが以下のように構成されているとします

<local:UserControl1 x:Class="UserControl1
xmlns:Converters="clr-namespace:MyConverter"
xmlns:......>

Xamlのどこかに、ListItemを含むListBoxと、以下に示すようにListBoxで何らかのアクションを実行するためのボタンがあります

 <ListBox x:Name="SomeViewmodel" MinWidth="300" MaxWidth="300" Height ="Auto"  HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"  >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="LayoutGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualHeight}" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding someproperty}" Grid.Column="0">
</TextBlock>
<Border
<Button x:Name="btn1" ">
<Image Source="someImage.png"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="Commands:MyCommand" >
<i:InvokeCommandAction.CommandParameter>
<MultiBinding Converter="{Converters:MyConverter}">
<Binding />
<Binding  Source="{RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UserControl1}}"  />
</MultiBinding>
</i:InvokeCommandAction.CommandParameter>
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>

私はコンバータにオブジェクトを送信することができますが、コンバーターで受信したオブジェクトはタイプです System.Windows.Data.RelativeSource どこにあるべきか UserControl1.

私は何が欠けていますか? RelativeSourceObjectからUserControl1オブジェクトを取得するにはどうすればよいですか?

回答:

回答№1は0

あなたはバインディングを次のようにする必要があります:

<MultiBinding Converter="{Converters:MyConverter}">
<Binding />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UserControl1}}"  />
</MultiBinding>

すなわち、バインディングは RelativeSource プロパティではなく、 Source プロパティ。


回答№2の場合は0

更新しました:

このコードを試してください:

<Binding RelativeSource="{RelativeSource Self}"/>