2011-06-16 147 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