2010-04-06 2 views
0

MVVM 디자인 패턴을 처음 사용하며 프로젝트를 자동화하여 배송 프로세스를 자동화하고 있습니다.개체 속성 값을 텍스트 상자로 가져 오는 데 시간이 많이 걸리는 경우

내가 겪고있는 특정 문제는 UserControl (내 EditShipmentView)을로드 할 때 ViewModel을 DataContext에 할당한다는 것입니다. ViewModel은 레코드를 전달하는 엔티티를 가져 오는 데 사용하는 recordID를 전달받습니다. 이 작업은 Mole (시각화 프로그램)에서 볼 수 있으므로 성공적으로 수행됩니다.

아래는 첫 번째 몇 개의 TextBox를 보여주는 XAML 조각이며 바인딩이 어떻게 생겼는지 생각했습니다.

<local:SnazzyForm Background="#FF318AE1"> 

    <Grid Margin="6,0,0,0"> 

     <TabControl Style="{DynamicResource SnazzyTabControl}" TabStripPlacement="Left" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,0,0,50"> 
      <TabItem Header="Overview" Style="{DynamicResource TransparentTabItems}"> 
       <Grid Margin="6,0,0,0"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 

        <StackPanel DataContext="{Binding Path=ShipmentRecord}"> 
         <TextBlock HorizontalAlignment="Left" Text="Contact Info" TextWrapping="Wrap" Style="{DynamicResource TitleText}"/> 
         <Path Fill="#FFFFB900" Stretch="Fill" HorizontalAlignment="Left" Width="200" Height="2" Data="M0,16.5 L278.5,16.5" Stroke="#FFFFB900"/> 
         <StackPanel Margin="0,10,0,0"> 
          <Grid Margin="0,16,0,0"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width=".40*"/> 
            <ColumnDefinition Width=".60*"/> 
           </Grid.ColumnDefinitions> 
           <TextBlock HorizontalAlignment="Right" Text="Company" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/> 
           <TextBox Text="{Binding Path=CompanyName, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1"/> 
          </Grid> 
          <Grid Margin="0,16,0,0"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width=".40*"/> 
            <ColumnDefinition Width=".60*"/> 
           </Grid.ColumnDefinitions> 
           <TextBlock HorizontalAlignment="Right" Text="Contact" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/> 
           <TextBox Grid.Column="1" Text="{Binding Path=ContactName}" TextWrapping="Wrap" d:LayoutOverrides="Height"/> 
          </Grid> 

그래서 ... EditShipmentView (SnazzyForm에서 상속)을 요약하자면 의 DataContext가 EditShipmentViewModel.ShipmentRecord 발송물 객체 ShipmentRecord.CompanyName과 (성공적으로) 채워집니다 EditShipmentViewModel 것은 분명를 반환해야하는 문자열입니다 회사의 이름.

가장 최근 시도 인 점에 유의하십시오. 이전에는 Stackpanels DataContext를 바인딩하지 않았으며 "{Binding Path = ShipmentRecord.CompanyName}"같은 텍스트 상자가 바인딩되어 있었고 백 가지 변형이있는 것 같습니다. 내가 남긴 머리카락은 급속히 물러나고있다. 제 머리를 생각하고 도움을주세요.

코리

+0

출력 창에 데이터 바인딩 오류가 발생합니까? –

+0

출력에서 ​​데이터 바인딩 오류가 발생하지 않습니다. 처음에는 그랬지만 레코드로드가 조용히 실패했기 때문입니다. 일단 고정되면, 여전히 텍스트가없고 오류가없는 이유를 말해주십시오. – CodeWarrior

+0

코리 (Cory) : 내 (새로운) 답변을보십시오 -이 경우에 내가 생각할 수있는 중요한 것입니다. –

답변

2

코드를 표시 하시겠습니까? 뷰 모델이 변경 될 때 뷰에 알림을 보내지 않을 가능성이 있습니다. 바인딩이 정확하지 않으면 (해결되지 않음) Visual Studio의 디버그 출력 창에 해당 결과가 표시됩니다. 그것도 확인하십시오.

+0

OnPropertyChanged ("ShipmentRecord") ViewModel 생성의 초기 단계에서 다시 언젠가는 나와 논쟁의 대상이 된 문제의 주범이되었습니다. 도움 주셔서 감사합니다. 코리 – CodeWarrior

0

EditShipmentViewModel (범인 가능성이 높음)과 ShipmentRecordINotifyPropertyChanged을 구현하는지 확인하십시오.

초기보기가 설정된 후 데이터가로드되고 클래스가 ShipmentRecord의 PropertyChanged 이벤트를 발생시키지 않으면 View (xaml)는 바인딩을 업데이트하는 것을 결코 알 수 없으며 빈 문자열.

관련 문제