我创建了一个用户控件,让我们说UserControl1。我有一个子控制按钮,通过单击我想要将UserControl1的对象和与按钮绑定的数据传递给转换器。我正在使用MVVM模式执行命令。
让我们说用户控件的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对象?
答案 0 :(得分:0)
你的约束力应该如下:
<MultiBinding Converter="{Converters:MyConverter}">
<Binding />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UserControl1}}" />
</MultiBinding>
即。绑定应使用RelativeSource
属性,而不是Source
属性。
答案 1 :(得分:0)
更新:
试试这段代码:
mDelta