2017-06-24 53 views
3

我的模型有兩類ItemAItemB,其實現ICustomControlItem接口,並且它們都執行如下...使用抽象類或接口的集合,作爲一個依賴屬性一個UWP模板化控件

public interface ICustomControlItem 
{ 
    string Text { get; set; } 
} 

public class ItemA : ICustomControlItem 
{ 
    public string Text { get; set; } 
} 

public class ItemB : ICustomControlItem 
{ 
    public string Text { get; set; } 
} 

我的目標是創建一個模板控件CustomControl,它有一個(依賴)屬性Items這將是一個ObservableCollection<ICustomControlItem>。我使用了ObservableCollection<T>,因爲我想在集合更改時更新視圖。

因此,控制被定義爲如下...

[ContentProperty(Name = nameof(Items))] 
public sealed class CustomControl : Control 
{ 
    public CustomControl() 
    { 
     DefaultStyleKey = typeof(CustomControl); 
     Items = new ObservableCollection<ICustomControlItem>(); 
    } 

    public ObservableCollection<ICustomControlItem> Items 
    { 
     get { return (ObservableCollection<ICustomControlItem>)GetValue(ItemsProperty); } 
     set { SetValue(ItemsProperty, value); } 
    } 

    public static readonly DependencyProperty ItemsProperty = 
     DependencyProperty.Register(nameof(Items), typeof(ObservableCollection<ICustomControlItem>), typeof(CustomControl), new PropertyMetadata(new ObservableCollection<ICustomControlItem>())); 
} 

...以其XAML ControlTemplate含有ListView顯示Items依賴項屬性的項目...

<ControlTemplate TargetType="local:CustomControl"> 
    <Grid> 
     <ListView ItemsSource="{TemplateBinding Items}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Text}" /> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </Grid> 
</ControlTemplate> 

我使用以下XAML在XAML頁面上初始化並填充的實例(使用ItemAItemB類的對象)。

<local:CustomControl> 
    <local:ItemA Text="Item #1" /> 
    <local:ItemB Text="Item #2" /> 
    <local:ItemA Text="Item #3" /> 
</local:CustomControl> 

在這一點上,我希望大家很好,因爲這兩個ItemAItemB實現ICustomControlItem接口。但是,Visual Studio中不斷給我,上面寫着警告...

類型的值「意達」不能被添加到一個集合或類型「的ObservableCollection」的字典

然而,儘管錯誤,XAML在設計器中正確渲染,並且應用程序運行良好,但IntelliSense在VS假定的XAML中不起作用。

Screenshot

我懷疑問題出在ObservableCollection的使用,因爲錯誤不會發生時,

  1. ItemsObservableCollection<object>(但是我需要它被限制在ICustomControlItem接口)。
  2. ItemsObservableCollection<string><x:String>元素被添加到控件。

如何將這個問題解決,這是一個抽象類或接口的集合依賴項屬性,來實現?

+1

奇怪。我在VS或Blend中的XAML中看不到任何IntelliSense錯誤。 –

回答

0

看似問題出在我安裝的Visual Studio 2017社區版(或其中一個模塊)的版本上。更新IDE(至Version 15.2 (26430.14) Release)解決了該問題。

相關問題