C# 从其他模块设置属性
我在一个模块中有一个带Prism和mvvm架构的wpf应用程序,我有一个树状视图,在另一个模块中有文本框。两个模块都正确加载。 我想做的是 -单击树视图节点。 -在viewmodel中设置当前选定的对象。 -还触发一个事件(或其他事件),并将节点值设置为其他模块中的textbox 前两点工作正常。 这是我想不出来的第三个 这是我的树视图代码C# 从其他模块设置属性,c#,wpf,mvvm,prism,C#,Wpf,Mvvm,Prism,我在一个模块中有一个带Prism和mvvm架构的wpf应用程序,我有一个树状视图,在另一个模块中有文本框。两个模块都正确加载。 我想做的是 -单击树视图节点。 -在viewmodel中设置当前选定的对象。 -还触发一个事件(或其他事件),并将节点值设置为其他模块中的textbox 前两点工作正常。 这是我想不出来的第三个 这是我的树视图代码 <TreeView Name="TreeViewTest" Grid.Row="1" Grid.Column="0" ItemsSource="{
<TreeView Name="TreeViewTest" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Path= TestObservable}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" Tag="{Binding Id}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
viewmodel isSelected是主viewmodel的子viewmodel,它实际上绑定了treeview模块
因此,它如下所示
public interface ITreeViewModel
{
ITreeViewModelView { get; }
ObservableCollection<IChildTreeViewModel> TestObservable{ get; set; }
}
公共接口ITreeViewModel
{
ITreeViewModelView{get;}
ObservableCollection TestObservable{get;set;}
}
任何帮助都会很好,Prism说我有四种模块间通信的方式:(事件聚合器、共享服务、区域上下文和命令),我还通过容器添加了另一种方式来共享对象。 但是,我相信在您的情况下,最好是(事件聚合器)或通过容器共享 事件聚合器: 1) 在项目中定义一个所有模块都可以访问的事件(instanse为Infrastructure.dll)。 此事件必须以经验形式呈现CompositePresentationEvent。YourObjectClass是要在模块之间传输的数据类:
namespace Infrastructure
{
public class ObjectChangedEvent: CompositePresentationEvent<YourObjectClass>
{
}
3) 从源视图模型发布定义的事件,因为目标视图模型已经订阅了该事件。
在目标视图模型中:
eventAggregator.GetEvent<UnCheckEvent>().Subscribe(CheckHandler);
eventAggregator.GetEvent<UnCheckEvent>().Publish(YourObject);
eventAggregator.GetEvent().Subscribe(CheckHandler);
在源代码视图模型中:
eventAggregator.GetEvent<UnCheckEvent>().Subscribe(CheckHandler);
eventAggregator.GetEvent<UnCheckEvent>().Publish(YourObject);
eventAggregator.GetEvent().Publish(您的对象);
4) 显然,最后应该实现获取对象的CheckHandler方法,并将其设置为绑定到文本框的属性
我希望这能有所帮助