Я пытаюсь создать элемент управления, который выборочно отображает разные вещи на основе типов, которые передаются, но по какой-то причине я вообще ничего не показываю.WPF ContentControl ничего не отображает
Есть ли какая-то фундаментальная вещь, которую я здесь отсутствует? (Этот код полностью разделен с моего реального приложения производства bu, демонстрирует то же поведение)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new List<ContactInformation>
{
new Address {Street = "21 Jump", City = "Sparta", State = "Denial"},
new Phone {Number = "734-555-1212"}
};
}
}
public class ContactInformation
{
}
public class Address : ContactInformation
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
public class Phone : ContactInformation
{
public string Number { get; set; }
}
<Window x:Class="ContentControlExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:contentControlExample="clr-namespace:ContentControlExample"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ItemsControl ItemsSource="{Binding /}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl DataContext="{Binding /}" Content="{Binding /}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type contentControlExample:Address}">
<StackPanel>
<TextBlock Text="{Binding Street}"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1}">
<Binding Path="City"/>
<Binding Path="State"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type contentControlExample:Phone}">
<TextBlock Text="{Binding Number}"/>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
Я не знаю, что означает '' {Binding /} "', но я не использую это. Просто измените это на '' {Binding} "'. –
Я никогда не видел, чтобы привязки использовали '/', как у вас ... возможно, это связано? Быстрый способ тестирования состоял в том, чтобы просто переместить ваши DataTemplates в '' и оставить свой 'ItemsControl' как' '. По умолчанию элемент ItemsControl уже рисует ваш элемент с помощью ContentPresenter и должен использовать ваши неявные шаблоны для рисования каждого элемента. Если это не сработает, проверьте свое визуальное дерево, и это «DataContext» с помощью инструмента, такого как [Snoop] (http://snoopwpf.codeplex.com/), и это, вероятно, укажет вам в правильном направлении. –
Rachel
/означает текущий элемент коллекции, поэтому будет означать текущий элемент списка ContactInformation. Однако вам не нужен другой. –
Phil