IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: WPF binding mezi <DataTemplate> a ObservableCollecton<string> nevrací hodnotu do zdroje

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
pavel.pihera
Člen
Avatar
pavel.pihera:27.11.2014 22:00

Ahoj! Potýkám se s tímto (pravděpodobně banálním) problémem:

  1. Mám dejme tomu objekt "osoba" třídy "cOsoba" s kolekcí (ObservableCo­llection<strin­g>) "Adresy".
  2. Tyto adresy bych chtěl editovat ve formuláři. Formulář má dataContext nastavený na objekt "osoba". V něm mám ItemsControl s ItemsSource nastaveným na kolekci "Adresy".
  3. ItemsControl.I­temTeplate obsahuje DataTemlpate s TextBoxem jehož Text je nastaven takto: Text=""{binding .}"

Problém: Data z kolekce se do formuláře přenáší korektně, obráceným směrem ne. Kdybych vytvořil další objekt např. třídy "cAdresa" s property např. "Text" a vlastní adresu umístil do této property a bindoval k ní takto: Text=""{binding Text}", tak to bude fungovat bez problémů, ale přijde mi to nepraktický.

Díky za radu!

 
Odpovědět
27.11.2014 22:00
Avatar
Odpovídá na pavel.pihera
Andrej Farkaš:27.11.2014 22:29

Si si istý, že sa dáta neprenášajú? Možno sa len prenášajú "po potvrdení zmeny v textboxe". Vyskúšaj rozšíriť binding.

<TextBox Text="{Binding <property>, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

Ale môže to byť spôsobené niečím iným, ale mne sa minule stalo, že sa to prenášalo do viewmodelu až po "potvrdení zmeny".

Nahoru Odpovědět
27.11.2014 22:29
Live. Love. Learn.
Avatar
pavel.pihera
Člen
Avatar
Odpovídá na Andrej Farkaš
pavel.pihera:27.11.2014 22:36

Už jsem to také zkoušel, ale v tom problém není. :( Problém je pouze, když použiji "Binding ." nebo "Binding Value=." V ostatních případech to funguje správně. Tady je případně zdroják: www.apstr.cz/wpf2.zip

Díky!

 
Nahoru Odpovědět
27.11.2014 22:36
Avatar
Odpovídá na pavel.pihera
sadlomaslox25:27.11.2014 22:59

string je imutable. musis ho wrapnout.

namespace Pokus
{
    class cOsoba
    {
        private ObservableCollection<Adresa> _adresy = new ObservableCollection<Adresa>();
        public ObservableCollection<Adresa> Adresy { get { return _adresy; } set { _adresy = value; } }
    }

    public class Adresa
    {
        public string adresa { get; set; }
    }
}
<TextBox Text="{Binding adresa, Mode=TwoWay}"/>
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
27.11.2014 22:59
Avatar
pavel.pihera
Člen
Avatar
Odpovídá na sadlomaslox25
pavel.pihera:27.11.2014 23:04

Šlo mi o to, zda neexistuje jednodušší řešení. Z odpovědi jsem pochopil, že ne. V důsledku jsem to vyřešil stejně. Díky moc!

 
Nahoru Odpovědět
27.11.2014 23:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.