Diskuze: windows phone 8 - Binding v XAMLu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ihned několik věcí zvláštně
Toť rychlý info. Ptej se čemu přesně nerozumíš
díky, díky, ale stále nerozumím jak nastavit ten ListBox
Nemůžu ti tu popsat celý systém DataBindingu. Takže to vezmu bodově
. Zaprvé se koukni na pattern
MVVM (Model-View-ModelView).
Každá property, kteoru chceš bindovat musí být public s přístupem pro
GET i SET. V Bindingu pomocí Mode lze nastavit chování
OneTime - pouze při první incializaci, měna property se neprojeví v
komponentě
OneWay - pouze z Modelu do View
TwoWay - oboustranná závislost, tedy změna v Modelu se projeví ve View,
naopak změna ve View se projeví do Modelu. Typicky například TextBox
Třídy kde chceš zajistit Binding musí implementovat rozhraní INotifyPropertyChanged. Pokud chceš více, info řekni si.
K tvému problému konkrétně. DataTemplate je pro tvůj případ
zbytečný. DataTemplate slouží pro určení "vzhledu" jednotlivých Itemů. K
problému. Mám ObservableCollection<int>. Ne List !
ObservableCollection ti zajistí správný chod Bindingu (není potřeba u
kolekce tedy dále řešit PropertyChanged)
Ve třídě MainPage (pro demonstraci stačí, obecně velmi špatný návrh !
)
public ObservableCollection<int> Numbers { get; set; }
a konstrutktor
// Celé Page řeknu že veškerá data jsou dostupná pouze v této třídě
// this.DataContext = this;
//nebo řeknu že DataContext pro ListBox je tato třída.
this.Numbers = new ObservableCollection<int>();
this.DataContext = this;
for (int i = 0; i < 11; i++)
{
Numbers.Add(i);
}
Kolekci naplním od 0 do 10 (žádná věda). Důležitý je řádek DataContext. každá property )nebo téměř každá) má vlastnost DataContext. Tím říkáš odkud dané data můžeš čerpat. Takže našemu oknu jsme nastavil DataContext na třídu okna. Tím jsem řekl že veškerá data bude brát z této třídy a případně dalších instancí ve třídě.
No a odpovídající XAML
<ListBox x:Name="listBox" ItemsSource="{Binding Numbers}" />
Zvláštní, že jsem tu zatím prakticky nikoho neviděl u Bindingu používat Path... já ji používám skoro vždy.
Př.
<TextBox Text="{Binding Path=Author, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
Grid.Column="1" Grid.Row="2" FontSize="16" />
A somzřejmě u Gridu nastavím source.
DataContext="{Binding ElementName=diaryData, Path=SelectedItem, Mode=OneWay}"
Jasně ale ne vždy Path
lze použít. Opět v tomto příkladě to také nelze použít.
Zobrazeno 6 zpráv z 6.