Diskuze: Událost volaná při přidání itemu do ListBoxu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= 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.
Ahoj,
M.
Používám List vadí to ? A záznamy do listboxu načítám právě v metodě Activated z Listu a Activated používám protože OnLoaded se spustí jenom při načtení okna právě proto hledám nějakou logičtější alternativu. A to bindování mám použít přímo v XAML ?
Když použiješ ObservablCollection, usnadníš si život...
Dobře dobře už googluju
Takže to použiji a potom si nastavím bindování, které si bude brát ty
záznamy z kolekce a když něco přidám nebo odeberu tak použiji událost
CollectionChanged a listbox se upraví ?
Netřeba gůglit, stačí se mrknout na tutorial zde na síti
Projdi si tutorial na c# wpf nebo si vyhledej observablecollection
Jo super už jsem to našel díky moc. Ale mam ještě jeden problém.. V
ListBoxu mám šablonu ve které mám 2 Labely a jejich Content je bindovanej a
nevím jak to mám udělat... Protože teď když binduju tu kolekci tak se bere
metoda ToString()
A ještě jedna věc potřeboval bych do kolekce přidávat i ID právě přidaného záznamu to mám udělat tak že si pro to id sáhnu do databáze ? Jinak to asi nepude ne
Pokial bindujes kolekciu, tak nastav binding labelu na konkretnu property, tj. napr: Content="{Binding Id}", atp.
ps: odporucany tutorial si uz presiel?
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<!-- definice napr. sloupcu -->
<Label Text={Binding Name} /> <!-- Name je vlastnost bindovaneho objektu -->
</Grid>
</DataTemplate>
<ListView.ItemTemplate>
<ListView>
Pokud použiješ, jak už ostatní psali, ObservableCollection máš změnu
o přidání / mazání prvků postaráno. ID musíš mít vždy v paměti
načtené u tvých objektů (jak by jsi hledal ID v databázi? když ID je
jednoznačně určující vlastnost záznamu?). Samozřejmě ID není nutné
nijak zobrazovat
Díky za odpověď. ano tutorial jsem našel a je to fkt skvělý Díky moc. Bindování u Labelu
mám ale netuším jak to použít jak řikám nyní se do listboxu bindujou
data z kolekce pomocí ToString a já fkt netušim jak to udělat že to
dosadím do Labelu.
A Petr Nymsa s tím id jsem to udělal tak že si nejdříve uložím záznam
do databáze a poté si tento záznam z databáze vezmu a přidám do kolekce je
to tk v pohodě ? Protože jaký mám přidat ID k objektu když nevím jaké je
v databázi ? Si prostě musím vzít s tý databáze ne ?
Díky všem za pomoc
Okok to já chápu já ale pak nechápu jak to mám pak přidat tomu labelu ten text z tý kolekce ? Mám to nastavit v xaml nebo přímo v kódu ? Jserm fkt ztracenej omlouvám se...
Četl sis zdejší tutoriály? Napisu strucne kod.
Dejme tomu, že máme objekt Person
class Person
{
public int id {get; set}
public string Name {get; set; }
}
Vytvoris PersonsPageViewModel, kde budes mit logiku pro zobrazeni / mazani
lidi apod.
Vytvorime si kolekci ObservableCollection<Person>
class PersonsPageViewModel : INotifyPropertyChanged
{
/* Implementaci rozhrani INotifyPropertyChanged vynechavam, predokladejme ze metodou OnPropertyChanged vyvolam zmenu (+ "trik" s CallerMemberName) */
public ObservableCollection<Person> Persons {get; set;}
private Person _selectedItem;
public Person SelectedItem
{
get {return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged();
}
}
PersonsPageViewModel()
{
Persons = // .. testovaci data
}
}
public PersonsPage()
{
InitializeComponent();
this.DataContext = new PersonsPageViewModel();
}
XAML
// nejaka kostra View
<ListView ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedItem}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<!-- definice napr. sloupcu -->
<Label Text={Binding Name} /> <!-- Name je vlastnost bindovaneho objektu -->
</Grid>
</DataTemplate>
<ListView.ItemTemplate>
<ListView>
Jo super díky moc nějak jsem to dokázal. Omlouvám se, že jsem tak
natvrdlý... Je tady fakt super komunita a děkuju za pomoc. Mam poslední
otázku... Když teď budu potřebovat použít právě vybraný item v listboxu
mám použí metodu SelectedItem, nebo si zavolat vlastnost SelectedItem z
ModelView ? Díky moc za odpověď snad poslední...
Žádnou metodu SelectedItem nemáš. Komponenta ListView / ListBox,.. má vlastnost SelectedItem kterou pomocí bindingu propojuješ s tvým ViewModelem, kde máš také vlastnost SelectedItem. Pokud budeš chtít dejme tomu po zmáčknutí tlačítka zobrazit vybraný prvek, opět to uděláš skrz ViewModel.
Ve ViewModelu si vytvoříš metodu ShowSelectedItemInfo()
ShowSelectedItemInfo()
{
MessageBox.Show(SelectedItem.Name); // pro jednoduchost
}
Jak vyvolat metodu?
Prvni zpusob je v code-behind odposlouchavat event Clicked na tlacitku a potom neco ve stylu
((PersonViewModel)DataContext).ShowSelectedItemInfo();
Mnohem lepsi a elegantnejsi zpusob je pomoci ICommmand rozhrani. Diky tomu veskera logika zustane ve ViewModelu.
Zobrazeno 18 zpráv z 18.