WPF Связывание предупреждений с RibbonComboBox - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь изучить и понять элементы управления ленты в c #, в частности привязку данных, но получаю ряд предупреждений, которые не могу разрешить при реализации RibbonComboBox. Мне удалось удалить сообщения об ошибках, но предупреждения остаются. Как я могу это исправить?

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

Это XAML-файл - MainWindow.xaml :

<RibbonWindow x:Class="MyProject.MainWindow"
        ...
        xmlns:local="clr-namespace:MyProject"
        xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
        mc:Ignorable="d"
        Title="MyProject" Height="450" Width="800" x:Name="MyProjectControl" >

    <Grid>
        <Ribbon DockPanel.Dock="Top" x:Name="Ribbon">
            <RibbonTab Header="Home" >
                <RibbonGroup Header="Shapes" Width="160">
                    <RibbonComboBox x:Name="cbShape" Height="Auto" Width="Auto" Label="Shape" VerticalAlignment="Center">
                        <RibbonGallery x:Name="shapeComboBox" SelectedItem="{Binding Path=Shape, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, diag:PresentationTraceSources.TraceLevel=High}" >
                            <RibbonGalleryCategory x:Name="shapeList" ItemsSource="{Binding Path=Shape, Mode=OneWay}" />
                        </RibbonGallery>
                    </RibbonComboBox>
                </RibbonGroup>
            </RibbonTab>
        </Ribbon>
    </Grid>
</RibbonWindow>

Код, стоящий за ним - MainWindow.xaml.cs :

using System.Collections.Generic;
using System.Windows.Controls.Ribbon;

namespace MyProject
{
    public partial class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();

            InitializeLists();
            this.DataContext = new RibbonSettings();
        }

        private void InitializeLists()
        {
            List<string> MyShapes = new List<string>
            {
                "Square", "Circle", "Ellipse", "Triangle", "Pentagon"
            };
            shapeList.ItemsSource = MyShapes;
        }
    }
}

Класс RibbonSettings.cs :

using System.ComponentModel;
namespace MyProject
{
    class RibbonSettings : INotifyPropertyChanged
    {
        private string _shape = "Square";
        public string Shape
        {
            get { return _shape; }
            set
            {
                if (_shape == value) return;
                _shape = value;
                OnPropertyChanged("Shape");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

Вывод отладки:

System.Windows.Data Warning: 56 : Created BindingExpression (hash=47501665) for Binding (hash=55144039)
System.Windows.Data Warning: 58 :   Path: 'Shape'
System.Windows.Data Warning: 62 : BindingExpression (hash=47501665): Attach to System.Windows.Controls.Ribbon.RibbonGallery.SelectedItem (hash=13583655)
System.Windows.Data Warning: 67 : BindingExpression (hash=47501665): Resolving source 
System.Windows.Data Warning: 70 : BindingExpression (hash=47501665): Found data context element: RibbonGallery (hash=13583655) (OK)
System.Windows.Data Warning: 71 : BindingExpression (hash=47501665): DataContext is null
System.Windows.Data Warning: 65 : BindingExpression (hash=47501665): Resolve source deferred

System.Windows.Data Warning: 67 : BindingExpression (hash=47501665): Resolving source 
System.Windows.Data Warning: 70 : BindingExpression (hash=47501665): Found data context element: RibbonGallery (hash=13583655) (OK)
System.Windows.Data Warning: 78 : BindingExpression (hash=47501665): Activate with root item RibbonSettings (hash=61356140)
System.Windows.Data Warning: 108 : BindingExpression (hash=47501665):   At level 0 - for RibbonSettings.Shape found accessor RuntimePropertyInfo(Shape)
System.Windows.Data Warning: 104 : BindingExpression (hash=47501665): Replace item at level 0 with RibbonSettings (hash=61356140), using accessor RuntimePropertyInfo(Shape)
System.Windows.Data Warning: 101 : BindingExpression (hash=47501665): GetValue at level 0 from RibbonSettings (hash=61356140) using RuntimePropertyInfo(Shape): 'Square'
System.Windows.Data Warning: 80 : BindingExpression (hash=47501665): TransferValue - got raw value 'Square'
System.Windows.Data Warning: 89 : BindingExpression (hash=47501665): TransferValue - using final value 'Square'

Пункты меню правильно отображаются в списке, и я могу выбрать опцию из списка.

Я добавил « UpdateSourceTrigger = PropertyChanged» к привязке, которая удалила «System.Windows.Data Warning: 61: BindingExpression (hash = 35104124): триггер обновления по умолчанию разрешен с ошибкой PropertyChanged », но другие оставайся неуловимым.

1 Ответ

1 голос
/ 21 июня 2019

Предупреждения, на которые вы ссылаетесь, являются просто расширенной информацией трассировки.Пока привязки работают так, как вы ожидаете, нет необходимости проверять их.Но если вы видите System.Windows.Data Error в выводе, это означает, что вы должны обратить внимание на то, что он говорит (в моем случае наиболее частой причиной является опечатка в имени свойства).

Вы можете изменить TraceLevel для привязок WPF в Параметры -> Отладка -> Окно вывода, изменив Привязка данных в разделе Настройки трассировки WPF .

Вот очень хороший урок по Отладка привязок WPF .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...