UWP ColorPicker передает цвет между листами, используя Binding - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь передать выбранный цвет из моего Colorpicker в другой

У меня есть следующее событие ColorChanged, которое успешно записывает в консоль, оно находится в части Settings_Page.xaml моего проекта:

public Color _TextColour;

        private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
        {

            _TextColour = TextColourPicker.Color;
            Debug.WriteLine(_TextColour);
        }

Затем я пытаюсь «прочитать» это в привязке XAML на отдельной странице с именем MainPage.xaml.Он предназначен для изменения цвета элементов навигационного представления.Я пытаюсь сделать это со следующим:

  <NavigationViewItem x:Name="TestItem"                                         
                                        Content="ColourTest" 
                                        Tag="Test_Page" 
                                        FontSize="22" 
                                        HorizontalAlignment="Stretch" 
                                        FontWeight="Bold" 
                                        Foreground="{Binding Path=Settings_Page._TextColour, Mode=OneWay}">
                    <NavigationViewItem.Icon>
                        <SymbolIcon Symbol="Shop"/>
                    </NavigationViewItem.Icon>
                </NavigationViewItem>

В настоящее время это не работает.Он отображает текст как черный.Я чувствую, что подошел к этому с неправильной точки зрения, но не уверен, где я иду не так.Я чувствую, что проблема определенно не в странице настроек, а в том, как я обрабатываю привязку.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Невозможно выполнить привязку данных между двумя разными страницами. В UWP есть элемент управления Frame, который используется для навигации между страницами и дескрипторами Page времени жизни. Ключевое наблюдение заключается в том, что при переходе между страницами в памяти всегда остается только одна страница (если вы не используете NavigationCacheMode). Поэтому, как только вы вернетесь назад от SettingsPage, он исчезнет, ​​и вы не сможете привязаться к нему. Кроме того, при переходе к SettingsPage снова создается новый экземпляр страницы, что также полезно знать - привязка данных требует привязки к экземпляру, и это в этом случае меняется.

Так что если вы хотите передать какое-то значение между двумя страницами, вам понадобится другой механизм для достижения этого. Самым простым подходом будет класс static, в котором вы будете назначать выбранный цвет или иметь свойство public static на первой странице, которое вы назначите перед переходом со второй страницы. Но помните, что вам также понадобится дополнительное нестатическое свойство для привязки данных, так как оно не работает с static. Это, безусловно, не самое чистое решение, но оно выполняет работу в более простых сценариях.

Если у вас есть инфраструктура MVVM, вы можете решить эту проблему лучше, если ваши модели стека навигации остаются в памяти - вы можете, например, использовать Event Hub или Messenger и опубликовать сообщение с заданными данными. на которую подписывается страница получателя. У MvvmCross и Mvvm Light есть решения, способные сделать это.

0 голосов
/ 15 сентября 2018

Передний план является свойством типа Brush, и вы связываете значение типа Color.Измените тип _TextColour на Brush и заполните его

_TextColour = new SolidColorBrush(TextColourPicker.Color);
...