2011-06-16 182 views
2

我有一個用戶控件,當用戶從列表框中選擇一個項目時,彈出窗口顯示另一個用戶控件。 父級初始化時,所有的usercontrols初始化。每當彈出彈出窗口彈出創建新的UserControl

<Popup x:Name="PopContactLogs" Width="670" StaysOpen="True" AllowsTransparency="True" PopupAnimation="Fade" PlacementTarget="{Binding ElementName=PageCustomerHome}" Placement="Center"> 
     <Border CornerRadius="5" BorderBrush="DimGray" BorderThickness="2" Background="White"> 
      <StackPanel> 
       <DockPanel Width="1180" Background="Gray"> 
        <TextBlock Text="Customer Contact Logs" FontWeight="Bold" HorizontalAlignment="Center" /> 
        <Button Name="cmdContactLogsClose" Content="X" Width="20" Foreground="Gainsboro" DockPanel.Dock="Right" /> 
       </DockPanel> 
       <l:cCustomerContactLogFull x:Name="cCCLF" /> 
      </StackPanel> 
     </Border> 
    </Popup> 

後面的代碼:

Private Sub lstContactLogs_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles lstContactLogs.MouseDoubleClick 
    cCCLF = New Tracks.cCustomerContactLogFull(CustomerID, sender.selecteditem) 
    PopContactLogs.IsOpen = True 
End Sub 

的問題是,在的ObservableCollection的數據永遠不會從我查看第一個記錄變化。我也試過

Private Sub lstContactLogs_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles lstContactLogs.MouseDoubleClick 
    cCCLF.CustomerID = CustomerID 
    cCCLF.ContactLog = sender.selecteditem 
    PopContactLogs.IsOpen = True 
End Sub 

它只是保留原始數據在那裏。 我真的很想每次重新創建它,每次都基本上有一個新的web部件。

+0

不確定你的意思。你是說當你改變列表框中的選定項目時,彈出窗口內的UserControl沒有改變? – 2011-07-07 17:49:22

+0

好吧,挺好的。 usercontrol有一個可觀察的集合,在初始化控件時被填充。當您單擊第二項時,它不會重新初始化控件。當我改變它來填充OnLoad事件時,我得到了一些不一致的錯誤,有時它會正常工作,有時它不會。所以我希望丟棄它,並且每次都重新初始化它。 – AndyD273 2011-07-07 18:38:25

+0

好吧,我想我現在有一個解決方案,併發布了一個答案。 – 2011-07-07 18:59:38

回答

0

更改您的模板,以使cCCLF不屬於它。而應將其替換爲< Grid x:Name =「cCCLFGrid」/ >。在你的代碼背後,當你想創建一個新的cCCLF控件時,調用cCCLFGrid.Children.Clear,創建一個新的cCCLF,然後調用剛剛創建的cCCLFGrid.Children.Add(cCCLF)。這保證刪除舊的和增加新的cCCLF。

+0

我假設你的意思是'而不是用* gridview *替換它。在你的代碼中。但是,聽起來這樣可以很好地工作,至少不難做到。 – AndyD273 2011-07-07 19:15:04

+0

您也可以使用GridView替換cCCLF,但可以使用Grid作爲cCCLF控件的容器。 – 2011-07-07 20:32:41