2010-04-06 61 views
0

我是MVVM設計模式的新手,我正在開發一個項目以自動運送流程。讓對象屬性值進入文本框需要一段時間

我遇到的特殊問題是我有一個UserControl(我的EditShipmentView),當它加載時,將其ViewModel賦值給它的DataContext。 ViewModel被傳遞一個recordID,它用來拉取代表貨物的實體。它成功地完成了這一工作,因爲我可以在Mole(可視化工具)中看到它。

下面是一個XAML片段,顯示了第一對TextBoxes,以及我認爲綁定應該是什麼樣子。

<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 EditShipmentViewModel.ShipmentRecord填充(成功)有貨對象 ShipmentRecord.CompanyName是,顯然不應該返回一個字符串公司名稱。

請記住,這只是我最近的嘗試。以前我沒有綁定Stackpanels DataContext,並將Textboxes綁定爲「{Binding Path = ShipmentRecord.CompanyName}」,看起來像是上百種不同的變體。我留下的頭髮正在迅速退去。請想想我的頭髮,發送幫助。

Cory

+0

這應該工作 - 你是否在輸出窗口中得到任何數據綁定錯誤? – 2010-04-06 18:36:05

+0

我沒有收到輸出中的任何數據綁定錯誤。起初我是,但那是因爲錄音加載失敗了。一旦修復,仍然沒有文字,也沒有錯誤告訴我爲什麼。 – CodeWarrior 2010-04-06 18:40:31

+0

科裏:看到我的(新)答案 - 這是我能想到的主要事情,在這種情況下。 – 2010-04-06 18:42:15

回答

2

讓我們知道您的代碼?機會是您的視圖模型只是在視圖發生變化時不通知視圖。如果綁定不正確(未解決),您將在Visual Studio的調試輸出窗口中看到輸出。檢查一下。

+0

OnPropertyChanged(「ShipmentRecord」) 在ViewModel創建的初始階段返回註釋,現在是一個問題的罪魁禍首,讓我非常生氣。 感謝您的幫助! Cory – CodeWarrior 2010-04-06 18:45:49

0

確保EditShipmentViewModel(可能是罪魁禍首)和ShipmentRecord實施INotifyPropertyChanged

如果在初始視圖設置後加載數據,並且EditShipmentViewModel類不會引發ShipmentRecord的PropertyChanged事件,那麼View(xaml)永遠不會更新綁定,您將看到一個空字符串。

相關問題