Bindowanie Z EF do DataGrid

0

Witam, od razu przejdę do przykładu:

public List<Occurence> Foo { get; set; }

Foo = (from m in model.Occurences
                         select m).ToList();

Mam klase Occurence i chcę, żeby kolekcja tych obiektów była wyświetlana w DataGridzie. W XAMLu mam:

<DataGrid ItemsSource="{Binding Foo}"..

.

co robię źle?

0
JanekZdw napisał(a):

co robię źle?

Na pewno to, że nie umieszczasz kodu w tagach <code>.

No i takie coś wygląda znacznie ładniej:
Foo = model.Occurences.ToList();

A jak to jakiś WPF jest, to tam się chyba nie używa List tylko jakichś ObservableCollectionów.

0

Robiłem identycznie jak napisałeś i... efekt ten sam, czyli nic. Samo Bindowanie okej, bo inna properta działa. Myślałem, że dlatego, że właściwie to nie zwraca listy occurence, tylko jakiś dziwnych EF rzeczy zawierających to co chce - nawet wrappowałem na swój typ i bez zmian.

var occurencesEF = model.Occurences.ToList();


            foreach (var item in occurencesEF)
            {
                Occurence element = new Occurence()
                {
                    Start = item.Start,
                    End = item.End,
                    Length = item.Length
                };
                Occerences.Add(element);      
            }
0

Sam dopiero zaczynam ogarniać EF.
Spróbuj czegoś takiego:

model.Ocurences.Load();
dataGrid.ItemsSource = model.Ocurences.Local; // i model.Ocurences.Local; zwraca od razu ObservableCollection
0
Class SomeClass : INotifyPropertyChanged {

private ObservableCollection<Occurence> _foo;

public ObservableCollection<Occurence> Foo
{
    get
    {
        return this._foo;
    }
    set
    {
        if (this._foo !=value)
        {
            this._foo = value;
             RaisePropertyChangedEvent("Foo");
        }
    }
}
 
public SomeClass(){

//Init model

       Foo = ObservableCollection<Occurence>(model.Occurences.ToList());
}

 public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChangedEvent(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }
}

Jeżeli zwraca Occurences.Local ObservableCollection to przypisujesz do Foo.

0

ObservableCollection używamy gdy mamy zamiar dodawać/usuwać elementy z listy. Jeżeli za każdym razem gdy dodajemy/usuwamy coś z listy pobieramy całą listę z bazy to wystarczy List (chociaż przedstawiony jako IEnumerable pewnie byłby poprawniejszy).
Przy czym ważne jest żeby zawsze najpierw nakarmić listę danymi a dopiero potem podstawić pod Foo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1