TOC

This article has been localized into Czech by the community.

Datové vazby (Data binding):

Vlastnost UpdateSourceTrigger

V předchozím článku jsme viděli, jak změny v textovém poli nebyly okamžitě odeslány zpět ke zdroji. Místo toho byl zdroj aktualizován až po ztrátě fokusu v textovém poli. Toto chování je řízeno vlastností vazby s názvem UpdateSourceTrigger. Výchozí hodnotou je hodnota "default", která v podstatě znamená, že zdroj je aktualizován na základě vlastnosti, kterou vážete. Při psaní jsou všechny vlastnosti kromě vlastnosti text aktualizovány ihned po změně vlastnosti (PropertyChanged), zatímco vlastnost text je aktualizována až při ztrátě fokusu na cílový prvek (LostFocus).

Výchozí hodnotou se míní výchozí hodnota aktivačního zdroje UpdateSourceTrigger. Další možnosti jsou PropertyChanged, LostFocus a Explicit. První dvě již byly popsány, zatímco poslední znamená pouze to, že aktualizace musí být provedena ručně, aby k ní došlo, pomocí volání UpdateSource Bindingu.

Aktualizoval jsem příklad z předchozí kapitoly, abych vám ukázal, jak všechny tyto možnosti fungují:

<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataContextSample" Height="130" Width="310">
	<StackPanel Margin="15">
		<WrapPanel>
			<TextBlock Text="Window title:  " />
			<TextBox Name="txtWindowTitle" Text="{Binding Title, UpdateSourceTrigger=Explicit}" Width="150" />
			<Button Name="btnUpdateSource" Click="btnUpdateSource_Click" Margin="5,0" Padding="5,0">*</Button>
		</WrapPanel>
		<WrapPanel Margin="0,10,0,0">
			<TextBlock Text="Window dimensions: " />
			<TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" />
			<TextBlock Text=" x " />
			<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50" />
		</WrapPanel>
	</StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace WpfTutorialSamples.DataBinding
{
	public partial class DataContextSample : Window
	{
		public DataContextSample()
		{
			InitializeComponent();
			this.DataContext = this;
		}

		private void btnUpdateSource_Click(object sender, RoutedEventArgs e)
		{
			BindingExpression binding = txtWindowTitle.GetBindingExpression(TextBox.TextProperty);
			binding.UpdateSource();
		}
	}
}

Jak si můžete všimnout, každý ze tří textboxů používá jiný UpdateSourceTrigger.

První z nich je nastaven na Explicit, což v podstatě znamená, že zdroj nebude aktualizován, dokud to ručně neuděláte. Proto jsem přidal tlačítko vedle textového pole, které aktualizuje zdrojovou hodnotu na požádání. V kódu na pozadí naleznete obslužnou rutinu Click, kde se používá několik řádků kódu k získání vazby z cílového ovládacího prvku a následné volání metody UpdateSource ().

Druhý TextBox používá hodnotu LostFocus , která je ve skutečnosti výchozí pro Text binding. To znamená, že zdrojová hodnota bude aktualizována pokaždé, když cílový ovládací prvek ztratí fokus.

Třetí a poslední TextBox pole používá hodnotu PropertyChanged, což znamená, že zdrojová hodnota bude aktualizována pokaždé, když se změní vázaná vlastnost, což se v tomto případě provede ihned, jakmile se změní text.

Spusťte si příklad na vašem počítači a podívejte se, jak zcela odlišně se tři textová pole chovají: první hodnota se neaktualizuje, pokud nekliknete na aktualizační tlačítko, druhá hodnota se nezmění, dokud se neopustí textové pole, zatímco třetí hodnota se automaticky aktualizuje při každém úderu na klávesnici, při změně textu atd.

Shrnutí

Vlastnost UpdateSourceTrigger vazby Určuje, jak a kdy je změněná hodnota odeslána zpět do zdroje. Avšak vzhledem k tomu, že grafický subsystém WPF velmi dobře tyto hodnoty pro vás nastavuje, měla by výchozí hodnota stačit pro většinu případů, kde získáte nejlepší kombinaci neustále aktualizovaného uživatelského rozhraní a dobrého výkonu.

Tato vlastnost vám rozhodně pomůže v případech, kdy potřebujete větší kontrolu nad procesem. Jen si dobře pohlídejte, zda neaktualizujete zdrojovou hodnotu častěji, než skutečně potřebujete. Chcete-li mít úplnou kontrolu nad aktualizací, použijte hodnotu Explicit a pak můžete provádět aktualizace ručně, ale tato možnost zabírá při práci s datovými vazbami více času.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!