2016-02-26 2 views
0

На данный момент я использую richtextbox Telerik, и исходный код, который я использую, находится здесь. http://demos.telerik.com/silverlight/#RichTextBox/TelerikEditor Я внедрил блок автозаполнения, так что когда элементы выбраны, источник данных слияния обновлений обновляется в соответствии с тем, что было выбрано. Весь код реализован за кодом (не в режиме просмотра). Из форумов telerik, похоже, что itemssource не может быть привязан к viewmodel.ViewModel уведомить код при изменениях

LetterEditorViewModel.xaml.cs

private void RadAutoCompleteBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var items = Collection.Where(x => RecipientsAutoCompleteBox.SelectedItems.Any(y => y.Id == x.Id); 
    radRichTextBox.Document.MailMergeDataSource.ItemsSource = items.ToList(); 
} 

Я программно заполнения поле автозаполнения на ViewModel стороне приложения. Когда я это делаю, кнопки слияния недоступны, они доступны только при вызове OnSelectionChange. Мне интересно, есть ли другой способ вызвать OnSelectionChange со стороны viewmodel приложения или другой способ заполнить источник данных слияния, надеюсь, MVVM. На форумах Telerik ничего нет.

ответ

2

Да, модель просмотра может создавать разворачиваемые события. Давайте рассмотрим некоторые части кода, чтобы показать концепцию.

Этот код будет идти в контроле ...

private void NotifyListeners() 
    { 
     RoutedEventArgs args = new RoutedEventArgs(RegisteredListeners); 
     RaiseEvent(args); 
    } 

    /// <summary> 
    /// The RoutedEvent registered Listeners using a tunneling strategy 
    // </summary> 
    public static readonly RoutedEvent RegisteredListeners = 
    EventManager.RegisterRoutedEvent("RoutedEventListener", RoutingStrategy.Tunnel, 
    typeof(RoutedEventHandler), typeof(MyControl)); 

    /// <summary> 
    /// Event Handler registration 
    /// </summary> 
    public event RoutedEventHandler OnNewMessageReceived 
    { 
     add { AddHandler(RegisteredListeners, value); } 
     remove { RemoveHandler(RegisteredListeners, value); } 
    } 

    /// <summary> 
    /// Called when a command is set and all Registered Listeners are notified 
    /// </summary> 
    public static EventHandler<EventArgs> OnNotifyNewMessage; 

С помощью этого обработчика ... может быть в CTOR управления ...

 OnNotifyNewMessage = (o, s) => 
     { 
      NotifyListeners(); 
     }; 

Чтобы поднять события с точки зрения модель, это сделало бы это.

MyControl.OnNotifyNewMessage("Message Helpers 1360", new EventArgs()); 

Маршрутизированные события не содержат простого способа «интегрировать». Таким образом, вы можете настроить обработчик событий, чтобы сообщить управляющему уведомить всех слушателей, используя либо стратегию пузырьков, либо туннелирование. Просто убедитесь, что в конце маршрутизируемое событие отмечено как обработанное = true, чтобы остановить дальнейшую прогрессию.

+0

Hi @John Peters, MessageEventArgs и Router не распознаются, могу ли я спросить, на что ссылаются эти ссылки? – Master

+0

И Router to RoutedEvent? – Master

+1

Благодарим за помощь =) – Master

Смежные вопросы