Veri Bağlama ve Olay İşleme
Tek yönlü ve çift yönlü veri bağlama uygulayın, DOM ve bileşen olaylarını yönetin, EventCallback kullanın.
Veri Bağlama ve Olay İşleme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Blazor'da Veri Bağlama
Blazor üç bağlama yönünü destekler: tek yönlü (salt okunur, @expr), olay tabanlı (@onclick vb.) ve iki yönlü (@bind). Bunlar birlikte tepkisel kullanıcı arayüzlerinin temelini oluşturur.
Tek Yönlü Veri Bağlama
Biçimlendirme içinde @ kullanarak bir C# ifadesinin çıktısını doğrudan verin. Değer, bileşen her yeniden oluşturulduğunda güncellenir; ancak DOM değerleri C# tarafına geri aktaramaz.
<!-- One-way: C# -> DOM -->
<p>Count: @_count</p>
<p>Full name: @($"{_firstName} {_lastName}")</p>
<p>Price: @Price.ToString("C")</p>
@code {
private int _count = 0;
private string _firstName = "Alice";
private string _lastName = "Smith";
[Parameter] public decimal Price { get; set; }
}@bind ile İki Yönlü Bağlama
@bind, hem özellik ayarlama hem de değişiklik olaylarını kullanarak bir input öğesini alana bağlar. Metin, sayılar, tarihler, onay kutuları ve seçim kutularıyla çalışır.
<input @bind="_name" placeholder="Enter name" />
<input type="number" @bind="_quantity" />
<input type="date" @bind="_dueDate" />
<input type="checkbox" @bind="_isActive" />
<p>Name: @_name | Qty: @_quantity | Active: @_isActive</p>
@code {
private string _name = "";
private int _quantity = 1;
private DateTime _dueDate = DateTime.Today;
private bool _isActive = true;
}Özel Olayla @bind
Varsayılan olarak @bind, onchange olayını kullanır. Bunu değiştirmek için @bind:event kullanın — örneğin oninput, canlı arama için her tuş vuruşunda tetiklenir.
@* Updates on every keystroke instead of on focus-loss *@
<input @bind="_search"
@bind:event="oninput"
placeholder="Live search..." />
<ul>
@foreach (var item in Filtered)
{
<li>@item</li>
}
</ul>
@code {
private string _search = "";
private string[] Items = { "Apple", "Banana", "Cherry", "Avocado" };
private IEnumerable<string> Filtered =>
Items.Where(i => i.Contains(_search, StringComparison.OrdinalIgnoreCase));
}@onclick ile Olay İşleme
C# temsilcilerini DOM olaylarına bağlamak için @onclick ve diğer DOM olay yönergelerini kullanın. Hem eşzamanlı yöntemler hem de async görevler çalışır.
<button @onclick="Increment">+</button>
<button @onclick="DecrementAsync">-</button>
<button @onclick="() => _count = 0">Reset</button>
<p>Count: @_count</p>
@code {
private int _count = 0;
private void Increment() => _count++;
private async Task DecrementAsync()
{
await Task.Delay(200); // simulate async work
_count--;
}
}Olay Bağımsız Değişkenleri
DOM olayları, olay bağımsız değişkeni nesneleri sağlar. Koordinatlara, tuş kodlarına, girdi değerlerine ve benzer bilgilere erişmek için işleyicinizde uygun bağımsız değişken türünü bildirin.
<input @onkeydown="OnKeyDown" @onfocus="OnFocus" />
<div @onmousemove="OnMouseMove">Move here</div>
<p>@_info</p>
@code {
private string _info = "";
private void OnKeyDown(KeyboardEventArgs e)
=> _info = $"Key: {e.Key} (Ctrl={e.CtrlKey})";
private void OnFocus(FocusEventArgs e)
=> _info = "Input focused";
private void OnMouseMove(MouseEventArgs e)
=> _info = $"Mouse: ({e.ClientX}, {e.ClientY})";
}Üst ve Alt Bileşen İletişimi için EventCallback
EventCallback, Blazor'da alt bileşenden üst bileşene iletişim kurmanın yoludur. Normal bir eylem/işlev temsilcisinden farklı olarak üst bileşende StateHasChanged'i otomatik olarak tetikler ve özel durumları doğru şekilde yönetir.
@* Child: ProductCard.razor *@
<button @onclick="() => OnBuy.InvokeAsync(Product)">Buy</button>
@code {
[Parameter] public Product Product { get; set; } = default!;
[Parameter] public EventCallback<Product> OnBuy { get; set; }
}
@* Parent: *@
<ProductCard Product="p" OnBuy="HandleBuy" />
@code {
private async Task HandleBuy(Product p)
{
await CartService.AddAsync(p);
// Parent re-renders automatically
}
}Varsayılan Davranışı Önleme ve Yayılımı Durdurma
Tarayıcının varsayılan eylemini iptal etmek için @onclick:preventDefault, olayın üst öğelere yayılmasını durdurmak için @onclick:stopPropagation kullanın.
@* Prevent form submission *@
<form @onsubmit="HandleSubmit" @onsubmit:preventDefault>
<input @bind="_value" />
<button type="submit">Save</button>
</form>
@* Stop click from bubbling to parent div *@
<div @onclick="ParentClicked">
<button @onclick="ChildClicked"
@onclick:stopPropagation>
Click me
</button>
</div>Özel Bileşenlerde @bind-Value ile İki Yönlü Bağlama
Üst bileşenden @bind-Value desteği sağlamak için özel bileşende Value/ValueChanged desenini uygulayın — bu, standart Blazor iki yönlü bağlama sözleşmesidir.
@* RatingInput.razor *@
@for (int i = 1; i <= 5; i++)
{
int star = i;
<span class="@(star <= Value ? "filled" : "")"
@onclick="() => ValueChanged.InvokeAsync(star)">★</span>
}
@code {
[Parameter] public int Value { get; set; }
[Parameter] public EventCallback<int> ValueChanged { get; set; }
}
@* Usage: *@
<RatingInput @bind-Value="_rating" />Girdi Olaylarını Geciktirme
Kullanıcı girdisiyle tetiklenen maliyeti yüksek işlemler için (API çağrıları, kapsamlı filtreleme), kullanıcı yazmayı bırakana kadar yürütmeyi geciktirmek üzere olayı CancellationTokenSource kullanarak geciktirin.
@code {
private string _query = "";
private CancellationTokenSource? _cts;
private async Task OnSearchInput(ChangeEventArgs e)
{
_query = e.Value?.ToString() ?? "";
_cts?.Cancel();
_cts = new CancellationTokenSource();
try
{
await Task.Delay(300, _cts.Token); // wait 300ms
Results = await SearchService.SearchAsync(_query);
}
catch (TaskCanceledException) { /* user still typing */ }
}
private List<string> Results = new();
}Hızlı Kontrol
Blazor'da alt bileşenden üst bileşene aktarılan olaylarda EventCallback'in Action/Func karşısındaki avantajı nedir?
Özet: Veri Bağlama ve Olay İşleme
Temel çıkarımlar:
- Tek yönlü bağlama: C# ifadelerinin çıktısını
@exprile verin - İki yönlü bağlama: input öğelerinde
@bindkullanın;@bind:eventtetikleyiciyi değiştirir - DOM olayları: türlenmiş olay bağımsız değişkenleriyle
@onclick,@oninput,@onkeydown EventCallback<T>: otomatik StateHasChanged ile alt bileşenden üst bileşene iletişim- Özel bileşenlerde iki yönlü bağlama için Value/ValueChanged uygulayın
- Gereksiz API çağrılarını azaltmak için maliyeti yüksek işlemleri geciktirin
Sıkça Sorulan Sorular
“Veri Bağlama ve Olay İşleme” dersi ücretsiz mi?
Evet — “Veri Bağlama ve Olay İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Veri Bağlama ve Olay İşleme” dersinde ne öğreneceğim?
Tek yönlü ve çift yönlü veri bağlama uygulayın, DOM ve bileşen olaylarını yönetin, EventCallback kullanın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Veri Bağlama ve Olay İşleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Blazor Bileşen Modeli
- Veri Bağlama ve Olay İşleme
- Bileşenler Arası İletişim ve DI
- Blazor'da Durum Yönetimi