C# ViewModel更改时通知隐藏代码
目前我正在使用Telerik的richtextbox,我使用的源代码来自这里。我已经实现了一个自动完成框,这样当选择项目时,邮件合并数据源将根据所选内容进行更新。所有代码都在代码后面实现(不在viewmodel中)。从telerik论坛上看,itemssource似乎无法绑定到viewmodel LetterEditorViewModel.xaml.csC# ViewModel更改时通知隐藏代码,c#,wpf,mvvm,telerik,C#,Wpf,Mvvm,Telerik,目前我正在使用Telerik的richtextbox,我使用的源代码来自这里。我已经实现了一个自动完成框,这样当选择项目时,邮件合并数据源将根据所选内容进行更新。所有代码都在代码后面实现(不在viewmodel中)。从telerik论坛上看,itemssource似乎无法绑定到viewmodel LetterEditorViewModel.xaml.cs private void RadAutoCompleteBox_OnSelectionChanged(object sender, Selec
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时可用。我想知道是否有其他方法可以从应用程序的viewmodel端触发OnSelectionChange,或者有其他方法填充邮件合并数据源,最好是MVVM。Telerik论坛上没有任何内容。是的,视图模型可以引发路由事件。让我们看看一些代码部分来显示这个概念。 此代码将进入控件
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;
OnNotifyNewMessage = (o, s) =>
{
NotifyListeners();
};
要从视图模型引发事件,可以这样做
MyControl.OnNotifyNewMessage("Message Helpers 1360", new EventArgs());
路由事件不包含“集成”的简单方法。因此,您可以设置eventhandler,告诉控件使用气泡或隧道策略通知所有侦听器。。。只需确保最终路由事件标记为handled=true以停止进一步的进程。是的,视图模型可以引发路由事件。让我们看看一些代码部分来显示这个概念。 此代码将进入控件
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;
OnNotifyNewMessage = (o, s) =>
{
NotifyListeners();
};
要从视图模型引发事件,可以这样做
MyControl.OnNotifyNewMessage("Message Helpers 1360", new EventArgs());
路由事件不包含“集成”的简单方法。因此,您可以设置eventhandler,告诉控件使用气泡或隧道策略通知所有侦听器。。。只需确保最终路由事件被标记为handled=true,以停止进一步的进程。Hi@John Peters,MessageEventArgs和Router未被识别,请问它们指的是什么?和Router to RoutedEvent?感谢您的帮助=)代码已更新,以反映有效的解决方案。Hi@John Peters,MessageEventArgs和Router未被识别,请问它们指的是什么?以及Router到RouteEvent?感谢您的帮助=)代码已更新,以反映一个正常的解决方案。