2012-03-08 2 views
1

프리즘을 처음 사용했지만 몇 가지 WPF/Mvvm-Light 응용 프로그램을 성공적으로 빌드했습니다. 각 View/ViewModel 쌍에 대해 ViewModel-first instaciation을 사용하고 있습니다. 보기가 모두로드되고 응용 프로그램이 열릴 때 비활성화됩니다. 조회수는 집계 이벤트를 목표로 잡아서 활성화됩니다. 이것은 ViewModel의 데이터에 바인딩하려고 시도한 첫 번째보기입니다. 내 목록 상자가 채워지지 않는다는 것을 제외하면 예상대로보기가 표시됩니다. 목록 상자의 개요 만 표시됩니다. 목록 상자의 배경색을 변경하면 빈 목록 상자의 색이 변경됩니다. ViewModel 속성에는 8 개의 행이 있지만 그 중 아무 것도 표시되지 않습니다. 하드 코딩 된 항목을 목록 상자에 표시 할 수 있습니다. 다른보기가 ViewModel 속성에 바인딩 할 수 있기 때문에보기 모델이 데이터 컨텍스트로보기에로드된다는 것을 알고 있습니다. 내 목록 상자 xaml에서 깨진 것이 있어야합니다. 데이터 전송 객체는 여기MVVM에서 프리즘으로보기가 작동하지 않는 경우

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 partial class DxStudioFindView : UserControl, IDxStudioFindView { 
    public DxStudioFindView() { 
     InitializeComponent(); 
    } 

    public IViewModel ViewModel { 
     get { return (IDxStudioFindViewModel)DataContext; } 
     set { DataContext = value; } 
    } 
    } 

됩니다 : 여기

<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> 

코드 숨김입니다 : 여기에 몇 가지 XAML을 검토하는 것입니다

public class DxStudioInstanceDto : IDxStudioInstanceDto { 
    public string FriendlyForkName { get; private set; } 

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

나는 아이디어가 없으면 어떤 제안이라도 도움이 될 것입니다. 감사합니다.

답변

1

목록이 ItemsSource="{Binding DatabaseInstanceList}"에 바인딩되어 있지만보기 모델의 속성이 DxStudioInstanceList입니다.

+0

Thwuuupppp ... [이마를 때리는 소리.] 나를 찾아 주셔서 감사합니다. 때로는 숲이 나무를 보는 길에옵니다. – JimBoone

관련 문제