2012-05-01 7 views
5

Próbuję dowiedzieć się, jak korzystać z UpdateSourceTrigger = Explicit.Dobry przykład, jak używać UpdateSourceTrigger = Jawne z MVVM

Mam następującą postać:

<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> 

jaki sposób powinienem zadzwonić do aktualizacji User nieruchomość?

Nie chcę adresować elementów przez x: Nazwa, aby wywołać wiązanie. Jeśli mam adresować elementy przez x: Name, równie dobrze mogę przejść bez wiązania, o ile mi wiadomo.

Odpowiedz

9

Należy wywołać BindingExpression.UpdateSource w kodzie z tyłu, aby ręcznie zaktualizować powiązanie. Jawne powiązanie nie jest tak naprawdę zgodne z MVVM, ponieważ trzeba bezpośrednio odwoływać się do obiektów widoku, aby wykonać ręczną aktualizację.

// itemNameTextBox is an instance of a TextBox 
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty); 
be.UpdateSource(); 
+0

Trochę późno, ale jeśli po prostu obsłużyć kliknięcie przycisku w kodzie opóźnieniem, rzeczy są nadal dzieje i przedstawieniu siebie tylko w widoku, a ViewModel otrzyma tylko informację aktualizacji z wiązaniami. – heltonbiker

Powiązane problemy