Это ошибка DataBinding
. Самый простой способ прочитать их - разбить его на двоеточие / полуколоны и прочитать его назад
System.Windows. Ошибка данных: 40: Ошибка пути BindingExpression: свойство 'Sender' не найдено в 'object' '' Char '(HashCode = 6619237)'. BindingExpression: Path = Sender; DataItem = 'Char' (HashCode = 6619237); целевым элементом является «TextBlock» (Name = ''); target свойство is 'Text' (type 'String')
blockquote>
- target свойство is 'Text' (type 'String')
- target element is 'TextBlock '(Name =' ');
- BindingExpression: Path = Sender;
- DataItem = 'Char' (HashCode = 6619237);
- Свойство «Отправитель» не найдено в 'object' '' Char '(HashCode = 6619237)'.
- Ошибка пути BindingExpression:
- Ошибка System.Windows.Data: 40:
1 сообщает вам, что существует свойство
Text
, вызывающее ошибка2 говорит вам, что свойство Text находится на элементе
3, сообщает вам, что проблема связи является причиной проблемы
{Binding Path=Sender}
4 говорит вам, что DataItem / DataContext за элементом
является элементом типа данных
Char
5, который указывает на фактическую проблему: нет свойства с именем
Sender
на объекте typeChar
6 просто говорит вам, что это ошибка привязки
7 У меня нет , что это значит
Поскольку I см., что у вас есть общедоступное свойство с именем
Sender
в вашем классеMessage
, и ясно, чтоMessage
неChar
, его очевидно, что вашDataContext
для каждого элемента неверен.Поскольку он установлен в
Char
, наиболее вероятной причиной является привязка к строке, аDataContext
для каждого элемента - символ в этой строке.И, конечно,
ItemsSource="{Binding Source=Messages}
означает, что вы меняете bindingSource
от текущегоDataContext
доstring
. Строки - это только массивы символов, поэтому это означает, что вы привязываетесь к массиву символов{ M, e, s, s, a, g, e, s }
Если вы измените свойство
Source
на свойствоPath
, он будет правильно читатьDataContext.Messages
вместо этого, и должен работать.
(Слово
Path
здесь необязательно, так как если вы не укажете имя свойства, тогда привязка предполагает, что это значение для свойстваPath
)В качестве побочного примечания я не вижу, что вы устанавливаете свой
DataContext
в любом месте формы, и я не вижу общедоступного свойстваMessages
.Конструктор
MainWindow
должен вероятно, имеет строку кода, которая выглядит так, чтобы установитьDataContext
в себя:this.DataContext = this;
И вам, вероятно, понадобится публичное свойство для вашего
ObservableCollection
, чтобы привязкаmessages ListView
могла его найти :public ObservableCollection
Messages { get { return messages; } set { messages = value; } } Я не уверен, что это было просто упущено, или если вы не знали, что вам нужны были.
О, и если вы планируете изменить какие-либо из этих связанных свойств и автоматически обновить пользовательский интерфейс, вам также понадобится реализовать INotifyPropertyChanged :)
И так как я сейчас в учебном режиме, я решил, что должен также ссылаться на этот ответ:
Переход из Windows Forms в WPF
Я бы очень рекомендовал прочитать его (и связанные статьи), если вы новичок в работе WPF и переходите от Winforms к WPF. Кажется, что вы:)
Можете ли вы выйти из: productCode? Вполне возможно, что значение не соответствует вашим ожиданиям, и удаление несуществующего элемента с радостью ничего не сообщит, если совпадение не найдено.
поле таблицы - prdocutcode
, почему вас зовут только код, замените код под моим кодом
<input type="hidden" name="productCode" value="<?php echo $product['productCode']; ?>">
Я думаю, у вас есть HTML и PHP коды в одном файле.
В чем может быть проблема:
Добавить условие, если форма размещена, перейти к удалению продукта.
if (isset( Я думаю, у вас есть HTML и PHP коды в одном файле.
В чем может быть проблема:
Добавить условие, если форма размещена, перейти к удалению продукта.
[110]POST['productCode'])) {
// Get ID
$code = filter_input(INPUT_POST, 'productCode', FILTER_VALIDATE_INT);
// Delete the product from the database
if ($code != false) {
$query = 'DELETE FROM products
WHERE productCode = :productCode';
$statement = $db->prepare($query);
$statement->bindValue(':productCode', $code);
$success = $statement->execute();
$statement->closeCursor();
}
}
Вы публикуете значение с другим ключом и получаете его с другим, и я считаю, что это может быть причиной, замените скрытый ввод следующим
<input type="hidden" name="productCode" value="<?php echo $product['productCode']; ?>">
Также вам нужно позаботиться о тегах php [ 111], который должен начинаться и заканчиваться для сценария php.
Пожалуйста, используйте пост-запрос AJAX для удаления по коду.