Привязка Silverlight к TextBlock от RIA Services - PullRequest
0 голосов
/ 01 сентября 2009

У меня есть TextBlock, который выглядит так:

<TextBlock Text="{Binding Name}" />

Это внутри <Canvas> с DataContext, установленным в MyClient, который находится в ViewModel:

public Client MyClient { get; private set; } // This is a RIA Entity, hence supports INotifyPropertyChanged

public ViewModel() {
    MyClient = new Client();
    LoadOperation<Client> loadClient = RiaContext.Load<Client>(RiaContext.GetClientsQuery());
    loadClient.Completed += new EventHandler(loadClient_Completed);
}

void loadClient_Completed(object sender, EventArgs e) {
    MyClient = DB.Clients.Single();
}

Установка MyClient, как указано выше, не вызывает событие PropertyChanged. Таким образом, пользовательский интерфейс никогда не обновляется.

Ответы [ 3 ]

0 голосов
/ 14 сентября 2009

Вы должны установить привязку OneWay или TwoWay.

<TextBlock Text="{Binding Name, Mode=OneWay}" />
<TextBlock Text="{Binding Name, Mode=TwoWay}" />

По умолчанию, я считаю, что привязка делает OneTime.

0 голосов
/ 11 июня 2010

Пользовательский интерфейс никогда не обновляется, потому что вы заменяете объект, к которому прикреплен пользовательский интерфейс. Замена происходит по методу loadClient_completed.

0 голосов
/ 01 сентября 2009

Вот что я в итоге сделал. Я добавил событие, которое срабатывает, когда обратный вызов RIA завершен. Затем я присоединяю к этому обработчик в представлении, которое устанавливает DataContext для ViewModel. Так эффективно, он ждет, пока ViewModel захватит данные, а затем устанавливает DataContext в ViewModel - таким образом, получая правильные данные.

...