Binding s property mimo DataContext – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Binding s property mimo DataContext – .NET – Fórum – Programujte.comBinding s property mimo DataContext – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Petrroll0
Stálý člen
4. 4. 2012   #1
-
0
-

Zdravím,

dělám WP7 appku a snažím se alespoň minimálně dodržovat MVVM pattern. K jedné stránce mám tak ModeView, který načte data a uloží si je do vlastnosti. Tu pak nastavím jako DataContext samotné stránce.

Problém je, že na stránce bych potřeboval nabindovat data ještě kromě toho k jedné proměnné v samotném ModelView. To se mi ale nedaří, protože DataContext je již nastaven na jinou vlastnost ModelView.

Chtěl bych se tak zeptat, jestli je možné nastavit Binding na vlastnost, která je hierarchicky nad DataContextem, případně jak to jinak elegantně vyřešit.

Nahlásit jako SPAM
IP: 92.62.224.–
Řešení
Evzen+2
Návštěvník
5. 4. 2012   #2
-
0
-
Vyřešeno Nejlepší odpověď

Ahoj, 

musím říct, že mi z tvého popisu není úplně zcela jasné o co jde. Každopádně MVVM využívám aktivně s WPF. Možná kdyby si více popsal svůj problém, tak by bylo snazší ti odepsat na konkrétní věc.

Každopádně pokud si vytvoříš okno, dejme tomu ShellView a k tomu ShellViewModel snadno je propojíš takto:

<Window x:Class="MyApp.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApp"
        Title="Moje Okno"
                  WindowStartupLocation="CenterScreen" Width="1000" Height="730">
    <Window.DataContext>
        <local:ShellViewModel/>
    </Window.DataContext>
    <Grid>
	// ...
    </Grid>
</Window>

Díky dědičnosti v XML máš zajištěno to, že každý element v okně bude mít nastavený DataContext na tvůj ViewModel.

Samozřejmě se to dá nastavit i jinak, např.:

        // metoda napr. v app.xaml.cs

	private void Application_Startup(object sender, StartupEventArgs e)
        {
	    ShellView view = new ShellView();
            view.DataContext = new ShellViewModel();
	    
            view.Show();
        }

No když máš zajištěn přístup z okna na ViewModel, tak si do ViewModelu můžeš přidat properties kolik chceš a různě si je bindovat.

// na View
..
<Label Content="{Binding Title}" />
..

// ViewModel
public class ShellViewModel : INotifyPropertyChanged
{
      private string _title;
      public string Title
      {
         get { return _title; }
         set
         {
               _title= value;
               NotifyPropertyChanged("Title");
         }
      }

      public event PropertyChangedEventHandler PropertyChanged = delegate { };

      public void NotifyPropertyChanged(string propName)
      {
	  PropertyChanged(this, new PropertyChangedEventArgs(propName));
      }
}

Samozřejmě těch properties tam můžeš mít kopec. Jen nezapomeň na implementaci INotifyPropertyChanged, protože se jinak View nikdy nedoví, že si za běhu něco na ViewModelu změnil.

Pokud konkretizuješ otázku, tak ti budu schopen napsat více. Snad ti toto pomohlo.

Nahlásit jako SPAM
IP: 193.179.183.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 77 hostů

Podobná vlákna

Binding ListView — založil hejnallukas

WPF TreeView Binding — založil David Roško

WPF DataGrid Binding — založil m4r10

WPF Binding &amp; DLINQ — založil Xelender

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý