2009-10-17 92 views
0

我试图通过代码更新wpf中的某些用户控件,但没有运气。WPF中的代码更新UI

这就是XAML:

<UserControl x:Class="SimuladorNocs.UI.Diagram.PropertiesWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:PropertyGrid="clr-namespace:Deepforest.WPF.Controls" 
> 
<DockPanel>   
    <StackPanel x:Name="stackPanel" Width="300" Height="600" HorizontalAlignment="Center"> 

     <PropertyGrid:PropertyGridControl Height="300" x:Name="MyPropertyGrid" /> 

    </StackPanel>  
</DockPanel> 

,这就是C#代码:

public void SetInstance(object obj){ 
    MyPropertyGrid = new PropertyGridControl { Instance = obj, Height = 300 }; 
    stackPanel.Children.Clear(); 
    stackPanel.Children.Add(MyPropertyGrid); } 

最后,物业appers正在改变,但我无法看到UI的变化。我也试图创建一个新的对象,而不是使用现有的MyPropertyGrid,没有工作,也试图不清除堆栈面板没有成功...

我错过了什么?

感谢

回答

1

我没有指定的propertygrid控件,但似乎没有更新UI。你是否在该控件上和堆栈面板上尝试“UpdateLayout()”?

0

换出PropertyGridControlLabel和它工作得很好。我建议你这样做。如果它起作用,那更多的是什么PropertyGridControl做错了什么的问题...

+0

不,它不适合我。 试图做到这一点,但从另一个用户控件调用SetInstance(),例如,当您从构造函数调用时,它的工作原理... – caiokf 2009-10-17 19:45:40

+1

在这种情况下,您可以发布一个完全不需要外部库的repro ? – 2009-10-17 19:54:02

1
stackPanel.InvalidateVisual(); 

请在最后一行添加。