Как использовать UpdateSourceTrigger = Explicit в элементе управления Items, например ListBox и т. Д. - PullRequest
1 голос
/ 23 августа 2009

У меня есть ListBox, в котором каждый его элемент имеет кнопку, я установил все текстовые поля в элементе данных, который Binding.UpdateSourceTrigger является явным.

Я добавил обработчик для нажатия кнопки, и что теперь?

Как мне собрать информацию с элементов управления? у них нет ключа, они динамические, как мне получить их BindingExpressions?

<ListBox ItemsSource="{Binding Path=Phones}">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type data:Phone}">
            <StackPanel Style="{StaticResource StackPanelStyle}">                  
                <TextBox Margin="5" VerticalAlignment="Center" Name="tbNumber"
Text="{Binding Number, ValidatesOnExceptions=True, UpdateSourceTrigger=Explicit}"
/>
                <Button Click="btnSavePhone_Click" Margin="5" 
Content="_Update" IsEnabled="{Binding IsValid}" />                
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

1 Ответ

1 голос
/ 23 августа 2009
Private Sub btnSavePhone_Click(sender As Button, e As RoutedEventArgs)
    'As I only have one TextBox I can use the following filter, 
    'you can of corse change it to Where c.Name = "tbNumber"
    Dim tbNumber = From c As FrameworkElement In _
        DirectCast(sender.Parent, StackPanel).Children Where TypeOf c Is TextBox
    Dim x = tbNumber.ToList
    Dim be = tbNumber.Cast(Of TextBox).First _
                 .GetBindingExpression(TextBox.TextProperty)

    If Not be.HasError Then be.UpdateSource()
End Sub

Обновление
В некоторых сценариях BindingGroup будет лучшим решением, тогда U вызовет BindingGroup.UpdateSources.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...