私はユーザーコントロールを作成して言うことができます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}"/>