Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 从MVVM到视图的绑定在Prism中不起作用_Wpf_Mvvm_Prism_Prism 4 - Fatal编程技术网

Wpf 从MVVM到视图的绑定在Prism中不起作用

Wpf 从MVVM到视图的绑定在Prism中不起作用,wpf,mvvm,prism,prism-4,Wpf,Mvvm,Prism,Prism 4,我是Prism的新手,但我已经成功构建了几个WPF/Mvvm Light应用程序。我正在为每个视图/视图模型对使用ViewModel first Instance。当应用程序打开时,所有视图都将被加载和停用。捕获针对视图的聚合事件后,视图将被激活。这是我第一次尝试绑定到ViewModel中的数据。视图按预期显示,但我的列表框从未填充。只有列表框的轮廓可见。如果更改列表框的背景色,则空列表框的颜色将更改。ViewModel属性有八行,但没有一行可见。我能够在列表框中显示硬编码的项目。我知道视图模型

我是Prism的新手,但我已经成功构建了几个WPF/Mvvm Light应用程序。我正在为每个视图/视图模型对使用ViewModel first Instance。当应用程序打开时,所有视图都将被加载和停用。捕获针对视图的聚合事件后,视图将被激活。这是我第一次尝试绑定到ViewModel中的数据。视图按预期显示,但我的列表框从未填充。只有列表框的轮廓可见。如果更改列表框的背景色,则空列表框的颜色将更改。ViewModel属性有八行,但没有一行可见。我能够在列表框中显示硬编码的项目。我知道视图模型是作为数据上下文加载到视图中的,因为另一个textblock能够绑定到ViewModel属性,它一定是我的listbox xaml中被破坏的东西。下面是一些要查看的xaml:

  <UserControl
     x:Class="DxStudioSelect.View.DxStudioFindView"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
  >
     <UserControl.Resources>
        <DataTemplate x:Key="DxStudioListTemplate">
           <TextBlock Text="{Binding Path=FriendlyForkName}"/>
        </DataTemplate>
     </UserControl.Resources>
     <Grid>
        <Grid.ColumnDefinitions>
           <ColumnDefinition Width="*"/>
           <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <ListBox
           Grid.Column="0"
           ItemsSource="{Binding DatabaseInstanceList}"
           ItemTemplate="{StaticResource DxStudioListTemplate}"
        />
        <TextBlock Text="{Binding Path=PageName}" Grid.Column="1" FontSize="32" Foreground="Green" TextAlignment="Right"/>
     </Grid>
  </UserControl>
以下是ViewModel:

  private readonly IEventAggregator _eventAggregator;
  private readonly IUnityContainer _unityContainer;
  private readonly IRegionManager _regionManager;
  private readonly string _dxStudioDatabaseName;
  private readonly HeaderUpdatePayload _headerUpdatePayload = new HeaderUpdatePayload("DxStudio", "Select DxStudio Instance");

  public DxStudioFindViewModel(IUnityContainer unityContainer, IRegionManager regionManager, IEventAggregator eventAggregator, IDxStudioFindView view)
     : base(view) {
     _unityContainer = unityContainer;
     _regionManager = regionManager;
     _eventAggregator = eventAggregator;
     View.ViewModel = this;

     if(IsInDesignMode) {

        //Design-time, so show fake data
        DesignTimeDataLoad();
     } else {

        //Run-time, so do the real stuff
        DesignTimeDataLoad();
        _dxStudioDatabaseName = LiteralString.DxStudioDatabaseNameTest;

        _eventAggregator.GetEvent<ViewChangeRequestEvent>().Subscribe(DxStudioInstanceChangeRequest, ThreadOption.UIThread, false, target => target.TargetView == LiteralString.DxStudioFind);
     }
  }


  public string PageName { get; set; }
  //public string PageName { get { return "Find DxStudio Instance"; } }

  private ObservableCollection<IDxStudioInstanceDto> _dxStudioInstanceList = null;
  public ObservableCollection<IDxStudioInstanceDto> DxStudioInstanceList {
     get { return _dxStudioInstanceList; }
     set {
        _dxStudioInstanceList = value;
        OnPropertyChanged("DxStudioInstanceList");
     }
  }

  private void DxStudioInstanceChangeRequest(ViewChangeRequestPayload payload) {
     var region = _regionManager.Regions[RegionNames.Content];
     region.Activate(View);

     _eventAggregator.GetEvent<ViewChangedHeaderEvent>().Publish(_headerUpdatePayload);

     var footerUpdatePayload = new FooterUpdatePayload(FooterDisplayMode.DxStudioSelect, _dxStudioDatabaseName, payload.TargetBackDatabase, payload.TargetBack, string.Empty, LiteralString.ToolboxStart);
     _eventAggregator.GetEvent<ViewChangedFooterEvent>().Publish(footerUpdatePayload);
  }

  private void DesignTimeDataLoad() {
     PageName = "Find DxStudio Instance";
     DxStudioInstanceList = new ObservableCollection<IDxStudioInstanceDto>() {
        new DxStudioInstanceDto("Instance1"),
        new DxStudioInstanceDto("Instance2"),
        new DxStudioInstanceDto("Instance3"),
        new DxStudioInstanceDto("Instance4"),
        new DxStudioInstanceDto("Instance5"),
        new DxStudioInstanceDto("Instance6"),
        new DxStudioInstanceDto("Instance7"),
        new DxStudioInstanceDto("Instance8"),
     };
  }
由于我完全没有主意,任何建议都会有帮助。
谢谢

您的列表已绑定到
ItemsSource=“{binding DatabaseInstanceList}”
,但您的视图模型具有属性
DxStudioInstanceList

您的列表绑定到
ItemsSource=“{binding DatabaseInstanceList}”
但是您的视图模型具有属性
DxStudioInstanceList

Thwuuuppp。。。[手撞额头的声音]谢谢你帮我发现了。有时森林会妨碍人们观赏树木。。。[手撞额头的声音]谢谢你帮我发现了。有时森林会妨碍人们观赏树木。
  private readonly IEventAggregator _eventAggregator;
  private readonly IUnityContainer _unityContainer;
  private readonly IRegionManager _regionManager;
  private readonly string _dxStudioDatabaseName;
  private readonly HeaderUpdatePayload _headerUpdatePayload = new HeaderUpdatePayload("DxStudio", "Select DxStudio Instance");

  public DxStudioFindViewModel(IUnityContainer unityContainer, IRegionManager regionManager, IEventAggregator eventAggregator, IDxStudioFindView view)
     : base(view) {
     _unityContainer = unityContainer;
     _regionManager = regionManager;
     _eventAggregator = eventAggregator;
     View.ViewModel = this;

     if(IsInDesignMode) {

        //Design-time, so show fake data
        DesignTimeDataLoad();
     } else {

        //Run-time, so do the real stuff
        DesignTimeDataLoad();
        _dxStudioDatabaseName = LiteralString.DxStudioDatabaseNameTest;

        _eventAggregator.GetEvent<ViewChangeRequestEvent>().Subscribe(DxStudioInstanceChangeRequest, ThreadOption.UIThread, false, target => target.TargetView == LiteralString.DxStudioFind);
     }
  }


  public string PageName { get; set; }
  //public string PageName { get { return "Find DxStudio Instance"; } }

  private ObservableCollection<IDxStudioInstanceDto> _dxStudioInstanceList = null;
  public ObservableCollection<IDxStudioInstanceDto> DxStudioInstanceList {
     get { return _dxStudioInstanceList; }
     set {
        _dxStudioInstanceList = value;
        OnPropertyChanged("DxStudioInstanceList");
     }
  }

  private void DxStudioInstanceChangeRequest(ViewChangeRequestPayload payload) {
     var region = _regionManager.Regions[RegionNames.Content];
     region.Activate(View);

     _eventAggregator.GetEvent<ViewChangedHeaderEvent>().Publish(_headerUpdatePayload);

     var footerUpdatePayload = new FooterUpdatePayload(FooterDisplayMode.DxStudioSelect, _dxStudioDatabaseName, payload.TargetBackDatabase, payload.TargetBack, string.Empty, LiteralString.ToolboxStart);
     _eventAggregator.GetEvent<ViewChangedFooterEvent>().Publish(footerUpdatePayload);
  }

  private void DesignTimeDataLoad() {
     PageName = "Find DxStudio Instance";
     DxStudioInstanceList = new ObservableCollection<IDxStudioInstanceDto>() {
        new DxStudioInstanceDto("Instance1"),
        new DxStudioInstanceDto("Instance2"),
        new DxStudioInstanceDto("Instance3"),
        new DxStudioInstanceDto("Instance4"),
        new DxStudioInstanceDto("Instance5"),
        new DxStudioInstanceDto("Instance6"),
        new DxStudioInstanceDto("Instance7"),
        new DxStudioInstanceDto("Instance8"),
     };
  }
public class DxStudioInstanceDto : IDxStudioInstanceDto {
  public string FriendlyForkName { get; private set; }

  public DxStudioInstanceDto(string friendlyForkName) { FriendlyForkName = friendlyForkName; }
}