Как связать DataTemplate с PhoneApplicationPage.Resources, когда страница уже привязана к другому классу?

Я отредактировал вопрос, чтобы включить дополнительную информацию на основе обратной связи.

В моем SettingsPage.xaml у меня есть

   

Я пытаюсь связать ListPicker DataTemplate со следующим XAML, размещенным на странице App.xaml


    
        
    
    
        
    
 

SettingsPage.xaml.cs определяет страну как открытый статический массив строк:

namespace myspace
{
    public partial class SettingsPage : PhoneApplicationPage
    {
        public static String[] Country = {
                            "Afghanistan",
                            "Åland Islands",
                            "Albania",
                            "Algeria",
                            "American Samoa",
                            "Andorra",
                            "Angola"}
                            ......;

Также на SettingsPage.xaml.cs я определил datacontext для другого объекта.

    public SettingsPage()
    {
        InitializeComponent();
         this.lpkCountry.SelectionChanged += new  SelectionChangedEventHandler(lpkCountry_SelectionChanged);
        this.lpkCountry.ItemsSource = Country;
        settings = new AppSettings();
        this.DataContext = settings;
    }

Но во время выполнения, когда я перехожу к SettingsPage, я получаю много ошибок такого рода

Ошибка System.Windows.Data: ошибка пути BindingExpression: свойство «Страна» не найдено в «Афганистане» «System.String» (HashCode = -2039466552). BindingExpression: Path = 'Country' DataItem = 'Афганистан' (HashCode = -2039466552); целевой элемент - «System.Windows.Controls.TextBlock» (Name = ''); target является «Text» (тип «System.String»).

Я понимаю, что существует конфликт между целевым элементом и целевым свойством, поэтому как это исправить?

0
nl ja de

1 ответы

One obvious mistake is RelativeSource={RelativeSource Self}. This means you try to bind to the very same object, like TextBox or ListPicker. Runtime is absolutely right in this case: 'lpkItemTemplate' property not found on 'Microsoft.Phone.Controls.ListPicker'

I guess something like Source={StaticResource lpkItemTemplate} would help, if you define your data template somewhere in App.xaml, in section.

EDIT: after you added more code. Your items source is an array of strings, so in data template you should use the following binding:


1
добавлено
Спасибо за ответ. Теперь проблема заключается в том, что свойство text для listpicker связано с общедоступным свойством класса, которое определяется с помощью кода. i.e: . Если я поместил шаблон данных в App.xaml, каков правильный путь к использованию?
добавлено автор PutraKg, источник
Причина, по которой я спросил, заключается в том, что, поскольку я получаю сообщение об ошибке для всего списка стран, например System.Windows.Data Error: BindingExpression path error: свойство «Страна» не найдено в «Зимбабве» «System.String» (HashCode = 993922277). BindingExpression: Path = 'Country' DataItem = 'Зимбабве' (HashCode = 993922277); целевой элемент - «System.Windows.Controls.TextBlock» (Name = ''); target является «Text» (тип «System.String») ..
добавлено автор PutraKg, источник
Я отредактировал свой вопрос. Я понимаю, чего он не может найти, и это неудивительно. Вот почему я спрашиваю, как правильно его найти
добавлено автор PutraKg, источник
Так оно и было. Благодаря!
добавлено автор PutraKg, источник
Неважно, где вы размещаете шаблон данных, поскольку он применяется только во время выполнения. Вы должны придерживаться одного и того же пути,
добавлено автор Haspemulator, источник
В вашей ошибке указано, что система не может найти свойство Country для типа string , что на самом деле не удивительно. Кажется, что у вас что-то не так в привязке. Если строка («Зимбабве») является объектом, на котором среда выполнения пытается найти свойство, вы должны иметь возможность написать выражение привязки следующим образом: . Попробуйте посмотреть, работает ли он. И вообще, трудно зафиксировать привязки, не видя всего кода, поэтому, если вы все еще не достигли желаемого, разместите больше кода.
добавлено автор Haspemulator, источник
Отредактированный ответ, чтобы отразить ваш код.
добавлено автор Haspemulator, источник
Большой! Если это сработало для вас, пожалуйста, подумайте над тем, чтобы отметить этот вопрос в ответ.
добавлено автор Haspemulator, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot