получить источник longListSelector из другого представления

Я использую этот пример: http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj244365%28v=vs.105%29.aspx

Когда приложение запускается в первый раз, я хочу добавить определенные элементы в список, их нельзя будет удалить. Итак, в App.xaml.cs у меня есть:

private void Application_Launching(object sender, LaunchingEventArgs e)
{
    IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
    List<MyConnection.locationList.locations> source = new List<MyConnection.locationList.locations>();

    if (!settings.Contains("firstrun"))
    {
        source.Add(new MyConnection.locationList.locations("Dulles, VA"));
        source.Add(new MyConnection.locationList.locations("Dulles, VA (Q)"));
    }
}

В моем locationList.xaml.cs (где будет longListSelector) у меня есть:

public locationList()
{
    InitializeComponent();

    List<locationSelectorClass.locationChoice<locations>> DataSource = locationSelectorClass.locationChoice<locations>.CreateGroups(source,
        System.Threading.Thread.CurrentThread.CurrentUICulture,
        (locations s) => { return s.LastName; }, true);
}

public class locations
{
    public string locName
    {
        get;
        set;
    }

    public locations(string locName)
    {
        this.locName = locName;
    }
}

Очевидно, он заявляет, что не может найти «источник», поэтому как я могу указать ему искать в App.xaml.cs или как вызвать источник после его создания?

Я пробовал "MyConnection.App.xxxx", но он не дает мне возможности для "источника".


person Dan James Palmer    schedule 08.04.2014    source источник


Ответы (2)


Если вы хотите использовать Myconnection.App.xxxx

Вы должны сделать источник общедоступным, и если вы хотите получить информацию, вы должны написать

List<MyConnection.locationList.locations> source;
private void Application_Launching(object sender, LaunchingEventArgs e)
    {

        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
        source = new List<MyConnection.locationList.locations>();

        if (!settings.Contains("firstrun"))
        {
            source.Add(new MyConnection.locationList.locations("Dulles, VA"));
            source.Add(new MyConnection.locationList.locations("Dulles, VA (Q)"));
        }
}

Теперь вы можете получить информацию. Однако использование статики не всегда является лучшим способом. Это означает, что вы можете выполнить поиск в настройках конструктора locationlist(). Или вы могли бы разобрать некоторую информацию с навигацией. Но, может быть, для первого примера лучше всего подойдет метод, который вы предложили, посмотреть код или загрузить информацию в конструкторе.

Дополнительно

Если вы хотите добавить/удалить записи в список и отобразить их в графическом интерфейсе, вам следует использовать ObservableCollection вместо List.

person JTIM    schedule 15.04.2014
comment
Спасибо за ответ! Я рассмотрю ObservableCollection, так как мне нужно будет добавлять/удалять записи и отображать все записи в графическом интерфейсе. - person Dan James Palmer; 15.04.2014
comment
@DanJamesPalmer Вам нужна была помощь с чем-то еще? - person JTIM; 20.04.2014

Вам не нужно делать это в событии Application_Launching вашего приложения. Вы можете сделать это в конструкторе вашего представления/контроля. Таким образом, у вас есть прямой доступ к нему.

Тем не менее, если вы хотите сделать это таким образом, то, как только вы создали список, сохраните его в IsolatedStorageSettings, а затем под вашим контролем верните его в новый объект. Там у вас будет доступ как к вашему списку, так и к списку местоположений. Если вы используете привязки, то в конструкторе элемента управления вам также нужно будет указать this.DataContext = this; - чтобы он знал, где искать ваш список местоположений.

Если вы используете MVVM, вы укажете модель представления в качестве своего контекста данных и получите список местоположений из IsolatedStorageSettings внутри вашей модели представления.

person Marius Bughiu    schedule 18.04.2014