6

UpdateSourceTrigger=Explicit の使用方法を理解しようとしています。

私は次のフォームを持っています:

<StackPanel x:Name="LayoutRoot" Margin="10" DataContext="{Binding ElementName=Window, Mode=OneWay}">
    <DockPanel>
        <TextBlock Text="Proxy address:" VerticalAlignment="Center"/>
        <TextBox Text="{Binding User.PageAddress, Mode=TwoWay, UpdateSourceTrigger=Explicit}" Margin="28,0,0,0"/>
    </DockPanel>
    <DockPanel Margin="0,5,0,0">
        <TextBlock Text="User name:" VerticalAlignment="Center"/>
        <TextBox Text="{Binding User.UserName, Mode=TwoWay, UpdateSourceTrigger=Explicit}" Margin="46,0,0,0"/>
    </DockPanel>
    <DockPanel Margin="0,5,0,0">
        <TextBlock Text="User password:" VerticalAlignment="Center"/>
        <TextBox Text="{Binding  User.Password, Mode=TwoWay, UpdateSourceTrigger=Explicit}" Margin="26,0,0,0"/>
    </DockPanel>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,5,0,0">
        <Button Content="Ok" IsDefault="True" Width="70" Margin="0,0,15,0" Click="Ok_Click"/>
        <Button Content="Cancel" IsCancel="True" Width="70"/>
    </StackPanel>
</StackPanel>

Userプロパティを更新するには、どのメソッドを呼び出す必要がありますか?

バインディングを呼び出すために x:Name で要素をアドレス指定したくありません。x:Name で要素をアドレス指定する必要がある場合は、私に関する限り、まったくバインドせずに行うこともできます。

4

1 に答える 1

10

バインディングを手動で更新するには、コード ビハインドでBindingExpression.UpdateSourceを呼び出す必要があります。手動で更新するにはビュー オブジェクトを直接参照する必要があるため、明示的なバインドは MVVM と実際には互換性がありません。

// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
于 2012-05-01T06:15:33.223 に答える