Вопрос по c#, mvvm, xaml – Хороший пример того, как использовать UpdateSourceTrigger = Explicit with MVVM
Я пытаюсь выяснить, как использовать UpdateSourceTrigger = Explicit.
Я получил следующую форму:
<code><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> </code>
какой метод я должен вызвать, чтобы обновитьUser
имущество?
Я не хочу обращаться к элементам по x: Name, чтобы вызвать привязку. Если мне придется обращаться к элементам по x: Name, я также могу вообще не связываться, насколько я понимаю.
1
ответ
BindingExpression.UpdateSource в коде, чтобы вручную обновить привязку. Явное связывание на самом деле не совместимо с MVVM, так как вам нужно напрямую ссылаться на объекты представления, чтобы выполнить обновление вручную.
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();