Обновите несколько пользовательских элементов управления с привязкой к данным в приложении WPF / WCF - PullRequest
1 голос
/ 17 августа 2011

Мой мозг застрял, пытаясь решить проблему, с которой я столкнулся, и некоторая помощь будет иметь большое значение.

У меня есть приложение, которое загружает структуру данных из службы WCF, и данные хранятся в наблюдаемом свойстве совокупности. У меня есть пользовательский элемент управления, который содержит сетку и связан либо с инициализатором пользовательского элемента управления, либо с помощью привязки данных x:Static. Пользовательский элемент управления или наблюдаемое свойство коллекции могут быть доступны на одной и той же машине более одного раза.

Если у меня несколько экземпляров пользовательского элемента управления, открытых и изменяющих запись с использованием сетки, я отправляю изменение в службу WCF, которая изменяет базу данных SQL, добавляет несколько бит к измененному объекту и передает ее обратно в WPF ( возможно, в будущем для других клиентских приложений через postbacks) приложение и обновления сетки. Однако он обновляет только одну конкретную сетку пользовательских контролей.

Если я заставлю другой пользовательский элемент управления сетку перепривязывать, то отражается изменение данных, а это не то, что я хочу. Поэтому я решил использовать LINQ, чтобы найти объект, подлежащий изменению в наблюдаемой коллекции, добавить, затем вставить объект в коллекцию, используя IList.IndexOf, на место, где он находился в коллекции, и удалить старый объект. Кажется, что этот метод работает нормально, но я читал, что есть лучший способ добиться этого.

Может ли кто-нибудь помочь пролить некоторый свет на то, что я пытаюсь достичь, или это способ, которым я достиг, уведомив все связанные сетки, что изменение сделано правильно / только делая это, все мои свойства реализуют inotifypropertyolated на их значениях.

Заранее спасибо

1 Ответ

1 голос
/ 17 августа 2011

Коллекция создается службой wcf и передается статическому классу для обеспечения доступа к ней. Сетки привязаны к этому статическому классу.

Согласно вашим комментариям я должен переписать свой ансер:

У вас есть статическое свойство, к которому привязаны сетки. Если вы назначите новую коллекцию этому свойству, сетки будут по-прежнему привязаны к старой, и поэтому они не обновляются, поскольку с их точки зрения ничего не изменилось.

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

Если вы хотите обновить сетки, вы должны зарегистрировать ChangedEvent-Handler на всех ваших элементах коллекции, когда они будут добавлены. Каждый раз, когда вызывается этот обработчик, потому что вы изменили один элемент коллекции, вы должны вызвать обновление сеток.

Обычно это делается моделью представления, которая упаковывает коллекцию (модель). Затем сетки связываются с этой моделью представления, которая заботится об информировании сеток (представлений) о любых изменениях. Взгляните на шаблон проектирования MVVM, который предоставит вам стандартизированный способ решения вашей проблемы.

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