使用ItemSource设置为ObservableCollection的UserControls的ItemsControl无法在可视树中呈现。

19 浏览
0 Comments

使用ItemSource设置为ObservableCollection的UserControls的ItemsControl无法在可视树中呈现。

在TestEntryView.xaml.cs中:\n

public partial class TestEntryView : UserControl
{
    public ObservableCollection Fields {get;set;}
    ...
}

\n其中TestFieldView是一个UserControl。\n



    
        
            
                
                
            
            
                
            
        
    

\n绑定是正确的,但是当我检查可视树时,我的子项都只包含一个边框和内容呈现器,没有子元素可视化。

0
0 Comments

问题的原因是"TestEntryView.Fields"属性没有实现依赖项属性(DependencyProperty)或引发属性更改通知(PropertyChanged事件)。解决方法是将该属性改为依赖项属性或让它引发属性更改通知。

要将其改为依赖项属性,可以按照以下步骤进行操作:

public ObservableCollection<TestFieldView> Fields
{
    get { return (ObservableCollection<TestFieldView>)GetValue(FieldsProperty); }
    set { SetValue(FieldsProperty, value); }
}
public static readonly DependencyProperty FieldsProperty =
    DependencyProperty.Register("Fields", typeof(ObservableCollection<TestFieldView>), typeof(MainWindow),
    new UIPropertyMetadata(new ObservableCollection<TestFieldView>()));

注意,上述代码中的MainWindow应替换为你的实际窗口类名。

如果属性已经是依赖项属性或实现了INotifyPropertyChanged接口,并且仍然无法正确渲染,请检查其他可能的原因。

0
0 Comments

问题出现的原因是ItemsControl的ItemsSource绑定到了一个ObservableCollection,但是没有为TestFieldView这个UserControl设置样式或DataTemplate,并且也没有定义ItemsPanelTemplate。

解决方法是添加TestFieldView的样式或DataTemplate,并且定义ItemsPanelTemplate。可以参考以下代码:


   
      
         
      
   
   
      
         
      
   

如果还是无法解决问题,可以尝试将ItemsControl替换为ListView,这样至少可以显示一个类名的列表,然后再进行调整。

另外,可能对你有用的是这个链接:galasoft.ch/mydotnet/articles/article-2007041201.aspx

0
0 Comments

问题的原因是在用户控件(TestFieldView)的构造函数中没有调用LoadComponent方法,导致Xaml未能正确解析。解决方法是在TestFieldView的构造函数中调用LoadComponent方法。

public TestFieldView()
{
    InitializeComponent();
}

通过调用LoadComponent方法,Xaml将被正确解析并加载,从而解决了无法渲染的问题。

0