#c# #wpf #silverlight #datasource #domainservices
#c# #wpf #silverlight #источник данных #domainservices
Вопрос:
У меня есть сетка с доменной службой, привязанной к контексту данных. Я хотел бы обновить этот контекст данных.
У меня есть код:
<Grid DataContext="{Binding Data, ElementName=userDomainDataSource}" Name="gridAccountDetails">
<sdk:Label Content="Address Line" HorizontalAlignment="Left" Margin="443,67,0,0" d:LayoutOverrides="VerticalAlignment" VerticalAlignment="Top" />
<TextBox HorizontalAlignment="Left" Margin="537,59,0,0" x:Name="txtAccountDetailsAddress" Text="{Binding addressline, Mode=OneWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" d:LayoutOverrides="VerticalAlignment" Height="24" VerticalAlignment="Top" DataContext="{Binding}" />
<sdk:Label Content="County" HorizontalAlignment="Left" Margin="443,142,0,143" d:LayoutOverrides="Height" />
<TextBox HorizontalAlignment="Left" Margin="537,134,0,143" x:Name="txtAccountDetailsCounty" Text="{Binding county, Mode=TwoWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" />
<sdk:Label Content="Email" HorizontalAlignment="Left" Margin="26,143,0,142" d:LayoutOverrides="HorizontalAlignment, Height" />
<TextBox HorizontalAlignment="Left" Margin="114,136,0,142" x:Name="txtAccountDetailsEmail" Text="{Binding email, Mode=TwoWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" d:LayoutOverrides="HorizontalAlignment" />
<sdk:Label Content="First Name" HorizontalAlignment="Left" Margin="26,67,0,0" VerticalAlignment="Top" />
<TextBox HorizontalAlignment="Left" Margin="114,60,0,0" x:Name="txtAccountDetailsFirstname" Text="{Binding firstname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" Width="233" Height="23" VerticalAlignment="Top" d:LayoutOverrides="HorizontalAlignment" />
<sdk:Label Content="Last Name" HorizontalAlignment="Left" Margin="26,104,0,0" VerticalAlignment="Top" />
<TextBox HorizontalAlignment="Left" Margin="114,97,0,0" x:Name="txtAccountDetailsLastname" Text="{Binding lastname, Mode=TwoWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" Height="23" VerticalAlignment="Top" d:LayoutOverrides="HorizontalAlignment" />
<sdk:Label Content="Postcode" HorizontalAlignment="Left" Margin="443,0,0,104" VerticalAlignment="Bottom" />
<TextBox HorizontalAlignment="Left" Margin="537,0,0,104" x:Name="txtAccountDetailsPostcode" Text="{Binding postcode, Mode=TwoWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" Height="24" VerticalAlignment="Bottom" />
<sdk:Label Content="Town" Margin="0,105,323,0" VerticalAlignment="Top" HorizontalAlignment="Right" />
<TextBox HorizontalAlignment="Left" Margin="537,0,0,180" x:Name="txtAccountDetailsTown" Text="{Binding town, Mode=TwoWay, NotifyOnValidationError=true, TargetNullValue='', ValidatesOnExceptions=true}" Width="233" Height="24" VerticalAlignment="Bottom" />
<Button Content="Edit Account Details" HorizontalAlignment="Right" Margin="0,0,26,35" VerticalAlignment="Bottom" Width="136"/>
</Grid>
Я установил исходный код домена с кодом:
EntityQuery<Web.User> qry =
from u in usrClass.getQuery()
where u.userId == usrClass.getUserId()
select u;
LoadOperation<Web.User> loadU = usrClass.loadUsersQuery(qry);
userDomainDataSource.DataContext = loadU.Entities;
Я пытался использовать:
gridAccountDetails.DataContext = userDomainDataSource.DataContext;
и
gridAccountDetails.DataContext = userDomainDataSource.Data;
безуспешно
Но я хотел бы обновить источник данных, чтобы новые значения помещались в текстовые поля, поскольку они могут быть изменены пользователем.
Кто-нибудь может предоставить какую-либо информацию. Спасибо
Ответ №1:
Ну, вы должны сообщить «gridAccountDetails», что «Данные» «userDomainDataSource» изменились. Наиболее широко используется для этого, чтобы вызвать событие PropertyChanged, хотя я не уверен, как это будет соответствовать вашему сервису, возможно, рассмотрите буфер из сервиса в вашу сетку.
Еще одна вещь, которую после привязки я бы не стал трогать datacontext вашей сетки, вы привязываете ее, а затем перезаписываете.
Комментарии:
1. Кажется, я не могу найти событие PropertyChanged, глядя в Visual Studio, его нет в списке.
2. Я бы создал пользовательский класс (маленькую оболочку) и использовал его для привязки. Внедрите INotifyPropertyChanged, и это должно сработать. Я только что заметил тег silverlight — я не уверен, будет ли это работать с silverlight, поскольку у меня нет опыта в этом. Я пишу только о wpf.