Как вызвать событие, когда привязка завершена? - PullRequest
2 голосов
/ 06 июня 2011

У меня есть приложение TextBox, которое я разрабатываю, и привязка выполняется в xaml

Я хочу иметь возможность вызывать событие, когда привязка TextBox Text Property завершена, т.е. когда текст загружается / изменяется посредством привязки в TextBox, как мне этого добиться?

Я пробовал TextChanged Event также Loaded Event, но не повезло сразу после завершения привязки, так как мне это сделать?

<ListBox x:Name="listBoxCategories" Background="Transparent" BorderThickness="0" Grid.Row="4" Grid.ColumnSpan="2" Margin="0" Padding="0" ItemContainerStyle="{StaticResource ListBoxItemStyle}" ItemsSource="{Binding ElementName=discussion_categoryDomainDataSource, Path=Data}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel x:Name="stackPanelCategory" Orientation="Vertical" Margin="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <TextBlock x:Name="TextBlockCategoryId" Text="{Binding Path=CategoryID}" />
                        <toolkit:Expander IsExpanded="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Style="{StaticResource ForumExpanderStyleRight}">
                            <toolkit:Expander.Header>
                                <TextBlock FontSize="16" FontWeight="Bold" Foreground="White" Margin="4,0,4,0" Text="{Binding CategoryName}" LayoutUpdated="TextBlock_LayoutUpdated" />
                            </toolkit:Expander.Header>
                            <ListBox x:Name="listBoxBoards" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Transparent" BorderThickness="0" Margin="0" Padding="0" ItemContainerStyle="{StaticResource ListBoxItemStyle}" ItemsSource="{Binding CategoryBoards}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Grid Margin="0" HorizontalAlignment="Stretch" x:Name="GridBoard">
                                        </Grid>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </toolkit:Expander>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

в этой строке

<TextBlock x:Name="TextBlockCategoryId" Text="{Binding Path=CategoryID}" />

Я хочу, чтобы при завершении привязки я хотел предоставить другой источник данных для поля списка под родительской панелью стека, поэтому мне нужно событие привязки, поэтому, когда у меня есть идентификатор catedory в текстовом блоке, который позже будет быть скрытым в xaml (который теперь не свернут по причинам тестирования)

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Это немного странная вещь, которую нужно сделать, она может помочь, если вы скажете нам, почему вы хотите это сделать?

Однако, не имея другой информации, я предложу решение.

Если события API TextBox не предоставляют необходимую информацию, попробуйте обработать событие LayoutUpdated.Это событие срабатывает каждый раз, когда происходит макет, который обычно является элементом, добавляемым в визуальное дерево.Когда это событие запускается, проверьте свойство TextBox.Text, чтобы узнать, установлено ли оно.

1 голос
/ 06 июня 2011

Это решило проблему для меня:)

<TextBlock FontSize="16" FontWeight="Bold" Foreground="White" Margin="4,0,4,0" Text="{Binding CategoryName}" Loaded="TextBlock_Loaded" />

Загруженное событие во внутреннем текстовом блоке, а не в верхнем текстовом блоке, потому что к моменту загрузки текст верхнего блока уже связан, поэтому я могу получить идентификатор:)

...