Wpf, как найти имя элемента из одного пользовательского элемента управления в другом
<TextBox x:Name="DescriptionTextBox"
Text="{Binding SelectedEntity.Description,
ValidatesOnExceptions=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
<ei:CallMethodAction MethodName="RaiseCanExecuteChanged"
TargetObject="{Binding Command, ElementName=SaveButton}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<userControls:SaveCloseUserControl />
Внутри этого пользовательского элемента управления
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<Button Width="50"
Command="{Binding SaveCommand}"
Content="Save" />
<Button Width="50"
Command="{Binding CloseCommand}"
Content="Close" />
</StackPanel>
Проблема здесь заключается в том, что этот TargetObject="{Binding Command, ElementName=SaveButton}" не находит SaveButton, потому что он находится внутри userControls:SaveCloseUserControl. Я посмотрел в Интернете и нашел решение (с 2009 года), для которого необходим код, не существует ли легкий способ сделать это сегодня? С уважением
редактировать
Основываясь на ответе @huzle, я сделал это в коде пользовательского элемента управления
public object CreateButton { get { return CreateChild; } }
и в xaml я добавил имя к кнопке сохранения.
так что моя финальная версия выглядит так
<TextBox x:Name="DescriptionTextBox"
Text="{Binding SelectedEntity.Description,
ValidatesOnExceptions=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
<ei:CallMethodAction MethodName="RaiseCanExecuteChanged"
TargetObject="{Binding CreateButton.Command,ElementName=MySaveCloseUserControl}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<userControls:SaveCloseUserControl x:Name="MySaveCloseUserControl"/>
1 ответ
Присвойте свой "SaveCloseUserControl" открытые свойства для "SaveButton" с именем "InnerSaveButton" и свяжите его с ElementName в свой SaveCloseUserControl и используйте "Путь" для перехода к команде вашей внутренней кнопки.
<TextBox x:Name="DescriptionTextBox"
Text="{Binding SelectedEntity.Description,
ValidatesOnExceptions=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
<ei:CallMethodAction MethodName="RaiseCanExecuteChanged"
TargetObject="{Binding InnerSaveButton.Command, ElementName=MySaveCloseUserControl}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<userControls:SaveCloseUserControl X:Name="MySaveCloseUserControl"/>