Привязать свойство коллекции классов через xaml
Это мой класс Globals
public class Globals
{
private static Globals instance = new Globals();
protected Globals()
{
}
public static Globals Instance
{
get { return instance; }
}
public TrackList Tracklist = new TrackList();
}
Это треклист в умном коде:
public class TrackList : SettingAttribute {
public TrackList()
{
this.tracks = new ObservableCollectionExt<Track>();
}
protected ObservableCollectionExt<Track> tracks;
public ObservableCollectionExt<Track> Tracks
{
get
{
return tracks;
}
}
public class Track : ICloneable
{
protected Track()
{
// Track instance is achieved by GetTrack
}
public GetTrack(string path)
{
// code implementation here
}
}
}
Я хочу связать Globals.Instance.Tracklist.Tracks в ListView, используя XAML.
Через среду выполнения очень легко использовать свойство ItemSource
lv.ItemsSource = Globals.Instance.Tracklist.Tracks;
но используя xaml, я попытался с несколькими кодами, но ни один не является хорошим.
2 ответа
В представленной модели создайте Property с типом Globals следующим образом:
property Globals Globals {get;set;}
В XAML привязать к нему:
<ListView ItemsSource="{Binding Path=Globals.Instance.Tracklist.Tracks}">
ItemsSource="{Binding Tracklist.Tracks, Source={x:Static local:Globals.Instance}}"
Треклист должен быть собственностью. Измените свой класс Globals на:
public class Globals
{
private static Globals instance = new Globals();
protected Globals()
{
Tracklist = new TrackList();
}
public static Globals Instance
{
get { return instance; }
}
public TrackList Tracklist { get; private set; }
}