Mahesh Alappuzha Ответов: 1

Как устранить эту ошибку привязки


var oBackgroundGrid = new Grid
           {
               Opacity = .5 ,
               DataContext = PortSettings
           };

           oBackgroundGrid.SetBinding ( Panel.BackgroundProperty ,

           new Binding
           {
               Source = PortSettings,
               Path = new PropertyPath ( "PortSettings.CActual" ) ,
               Converter = new ColorTemplateSelector ( ) ,
               UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged ,
               Mode = BindingMode.TwoWay
           } );


я создаю сетку в коде позади, но она показывает ошибку привязки как

System.Windows.Data Error: 40 : BindingExpression path error: 'PortSettings' property not found on 'object' ''CheckboxSetting' (HashCode=63345626)'. BindingExpression:Path=PortSettings.CActual; DataItem='CheckboxSetting' (HashCode=63345626); target element is 'Grid' (Name=''); target property is 'Background' (type 'Brush')


Что я уже пробовал:

я все пробую, не знаю, в чем ошибка

Jon McKee

Где PortSettings определились? Судя по ошибке, привязка, похоже, не может найти это свойство. Поможет увидеть взаимосвязь между PortSettings и где этот код определен.

Mahesh Alappuzha

частный объект _portSettings;
настройки портов общедоступных объектов
{
get { return _portSettings; }
набор
{
_portSettings = значение;
On свойство changed ( );

}
}
это свойство Portsettings

PortSettings = карта.Список настроек.Где (
настройка =>
установка.Кодекс.Отделка ( ).Равно ( sysSnmp ) ).Выберите ( Настройка =&ГТ; настройка ).Метода firstordefault ( );
вот я присвоить значение.

Jon McKee

Я имею в виду больше, на каком объекте они определены. Это PortSettings свойство на том же объекте, что oBackgroundGrid определяется ли он? Определения выглядят нормально - вероятно, это вопрос того, где они определены. WPF может быть трудно отлаживать без полного кода, потому что так много вещей может пойти не так или быть упущено.

Mahesh Alappuzha


пример пространства имен
{
публичный класс SampleViewModel: PropertyChangedBase
{

#регион [ публичные объекты недвижимости ]




частный объект _portSettings;
настройки портов общедоступных объектов
{
get { return _portSettings; }
набор
{
_portSettings = значение;
On свойство changed ( );

}
}

#endregion



#регион [ публичные методы ]


private void SampleFunction()
{

GetPortStatus ( );



var oBackgroundGrid = новая сетка
{
Непрозрачность = .5 ,
DataContext = Настройки Портов
};

обакграундгрид.SetBinding (Панель.BackgroundProperty ,

новая привязка
{
Источник = PortSettings,
Path = new PropertyPath ("PortSettings.Кактус" ) ,
Конвертер = новый ColorTemplateSelector ( ) ,
UpdateSourceTrigger = UpdateSourceTrigger.события PropertyChanged ,
Mode = BindingMode.двусторонний
} );

омастергрид.Дети.Добавить (oBackgroundGrid );




общественного недействительными GetPortStatus ( )
{

PortSettings = карта.Список настроек.Где (
настройка =>
установка.Кодекс.Отделка ( ).Равно ( sysSnmp ) ).Выберите ( Настройка =&ГТ; настройка ).Метода firstordefault ( );
}

#endregion


}
}

Afzaal Ahmad Zeeshan

Ваш код нуждается в большом количестве приведения типов...

Mahesh Alappuzha

может у конкретных

Afzaal Ahmad Zeeshan

Ошибка говорит о том, что свойство не было найдено на "объекте", а это означает, что вам нужно изменить этот тип объекта на определенный тип, где это свойство может быть найдено.

Видеть здесь для большего.

Mahesh Alappuzha

portsettings имеет другой тип thats, почему я данного вида в качестве объекта

1 Ответов

Рейтинг:
4

Jon McKee

Мне потребовалась секунда, но я думаю, что знаю, что здесь происходит. То Source должно быть установлено значение объекта (или родителя), который содержит свойство, к которому вы хотите получить доступ, в то время как Path это путь к этому свойству из источника. Попробуй

new Binding
{
Source = this,
Path = new PropertyPath ( "PortSettings" ) ,
Converter = new ColorTemplateSelector ( ) ,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged ,
Mode = BindingMode.TwoWay
}


EDIT: Примечание: Если вы хотите получить доступ к свойству PortSettings любить CActual вам нужно привести свойство или установить тип свойства к правильному типу вместо object. Затем просто измените Path к new PropertyPath("PortSettings.CActual").


Mahesh Alappuzha

это работает....
Большое вам спасибо Джон Макки