Привязать свойство коллекции классов через 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; }
}
Другие вопросы по тегам