/ / Ako sa databind vlastnosti exponované z ObservableCollection, keď ObservableCollection je vystavený z pohľadu modelu? - c #, xaml, mvvm, pozorovateľná kolekcia

Ako sú vlastnosti databind exponované z funkcie ObservationCollection, keď je objekt ObservationCollection vystavený modelu zobrazenia? - c #, xaml, mvvm, pozorovateľná kolekcia

I "m nie je schopný nájsť správnu väzbovú syntax pre vlastnosti viazania údajov na položkách obsiahnutých v ObservableCollection, keď je uvedená ObservableCollection vystavená z modelu pohľadu.

Keď som dáta viazať model je pozorovateľnépriamo. Keď som dáta zviažu model pozorovateľnú kolekciu, ako je vystavené na pohľad model, to nie je "t. Toto je aplikácia XAML / C # Windows Store 8.1.

Čo som v súčasnosti dostať z môjho kostrového testu

{binding Path=ID}
{binding Path=Letter}

Čo chcem

1
a

Mám triedu položiek

Položky sú uložené v pozorovateľnej kolekcii a nakoniec sa budem chcieť viazať na vlastnosti ID a Letter:

public class Item
{
public Item(int id, char letter)
{
ID = id;
Letter = letter;
}

public int ID
{
get;
set;
}

public char Letter
{
get;
set;
}
}

Trieda modelu obsahuje pozorovateľnú zbierku položiek

public class Model
{
public Model()
{
}

public ObservableCollection<Item> Items
{
get
{
return _theItems;
}
set
{
_theItems = value;
}
}

ObservableCollection<Item> _theItems = new ObservableCollection<Item>();
}

mám ViewModel ktorý odhaľuje pozorovateľnú kolekciu modelu

public class ViewModel
{
public ViewModel(Model model)
{
_model = model;
}

public ObservableCollection<Item> theItems
{
get
{
return _model.Items;
}
}

private Model _model;
}

môj Hlavná stránka konštruktor vytvorí model s niektorými testovacími údajmi, vytvorí ViewModel a nastaví DataContext stránky na model zobrazenia:

public MainPage()
{
this.InitializeComponent();

Model model = new Model();

// some test data
model.Items.Add(new Item(1, "a"));

_viewModel = new ViewModel(model);
this.DataContext = _viewModel;
}

môj Hlavná stránka XAML vyzerá takto

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<GridView ItemsSource="{Binding Path=theItems}" >
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock>{binding Path=ID}</TextBlock>
<TextBlock>{binding Path=Letter}</TextBlock>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>

Zámerom tejto testovacej kostry je ešte zjednodušiťnapodobniť môj skutočný cieľ, ktorým je mať model zobrazenia, ktorý odhaľuje niekoľko vecí, z ktorých jeden je pozorovateľná kolekcia objektov, ktorých rôzne vlastnosti chcem viazať. Ale viazanie vlastností na predmety, ktoré sú vystavené od pozorovateľnej zbierky, mi uniká.

Predpokladám, že môj problém sa týka viazania XAMLsyntax. Mám na mysli, že pretože som nastavil stránku s DataContext na ViewModel, že nastavenie ItemsSource z GridView na theItems by mi potom dovoliť odkazovať na ID a Letter vlastnosti položiek v kolekcii.

Keď som model priamo viazalObservableCollection na MainPage DataContext, to všetko je v poriadku, ale to sa líši od môjho cieľa s ViewModel, ktorý je vystaviť ďalšie veci okrem ObservableCollection, ktoré chcem viazať z jednotného modelu pohľadu.

Ja som sa snažil rôzne blogu a veci uvedené tu na StackOverflow bez úspechu.

odpovede:

0 pre odpoveď č. 1

Skontrolujte svoje XAML viazanie.

...
<TextBlock Text="{Binding ID, Mode=OneTime}"/>
<TextBlock Text="{Binding Letter, Mode=OneTime}"/>
...

Zvážte zmenu DataTemplate.

...
<DataTemplate>
<TextBlock>
<TextBlock.Inlines>
<Run Text="{Binding ID,Mode=OneTime}"/>
<Run Text=" - "/>
<Run Text="{Binding Letter,Mode=OneTime}"/>
</TextBlock.Inlines>
</TextBlock>
</DataTemplate>
...