Вопрос по c#, mvvm, xaml – Хороший пример того, как использовать UpdateSourceTrigger = Explicit with MVVM

6

Я пытаюсь выяснить, как использовать 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   ответ
10

BindingExpression.UpdateSource в коде, чтобы вручную обновить привязку. Явное связывание на самом деле не совместимо с MVVM, так как вам нужно напрямую ссылаться на объекты представления, чтобы выполнить обновление вручную.

// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
Error: User Rate Limit Exceeded

Похожие вопросы