2016-09-14 3 views
0

Я создал пользовательский элемент управления, скажем UserControl1. У меня есть кнопка управления дочерним элементом, нажав на которую я хочу передать объект UserControl1 и данные, связанные с кнопкой в ​​конвертер. Я использую шаблон MVVM для выполнения команды.Как получить объект родительского usecontrol в wpf

Допустит, файл Xaml для пользовательского элемента управления структурирован как ниже

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

где-то в Xaml существует Listbox, содержащий ListItem и кнопку для ведения каких-либо действий на 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.

Что мне не хватает? или что мне делать, чтобы получить объект UserControl1 из RelativeSourceObject?

ответ

0

Вы обязательный должен быть следующими:

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

т.е. связывание следует использовать RelativeSource свойство, а не Source недвижимости.

+0

Это работает для меня. очень маленькое изменение, но у меня было много головокружения. –

0

Обновлено:

Попробуйте этот код:

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

Я пробовал это ... но атрибут Name не может быть назначен для пользовательского контроля –

+0

@mayurrathi, извините, я изменил ответ. вы можете проверить его, я надеюсь, что это было более короткое решение для вас. – RAM

 Смежные вопросы

  • Нет связанных вопросов^_^