Итак, большую часть времени я живу в ASP.NET MVC Land - однако сейчас я пытаюсь создать некоторые инструменты анализа для нашего решения с использованием WPF (иначе он будет считать строки кода, какие файлы тестируются). извлечение метаданных из атрибутов и т. д.). Все в основном идет хорошо (код отражения у меня отлично работает). У меня проблемы с WPF ItemsControl. По сравнению с традицией <asp:Repeater />
ItemsControl меня просто поражает.
Мой XAML:
<ItemsControl x:Name="repeaterRecentProjects">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#094563" Margin="5" Padding="3">
<DockPanel>
<Image Source="/Content/Black-Internal-icon.png" Height="16" Width="16"></Image>
<TextBlock Margin="5,0" Text="{Binding}"></TextBlock>
</DockPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl>
Идея состоит в том, что DataTemplate содержит мой шаблон, насколько я понимаю. Затем в коде я могу сделать что-то вроде этого (РЕДАКТИРОВАТЬ: полный код позади страницы):
public partial class HomeScreen : Page
{
protected bool _isProjectChosen = false;
public HomeScreen()
{
InitializeComponent();
}
protected ObservableCollection<string> someFiles = new ObservableCollection<string>();
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
someFiles.Add("SomeFile.aspx");
someFiles.Add("SomeFile2.aspx");
someFiles.Add("SomeFile3.aspx");
repeaterRecentProjects.ItemsSource = someFiles;
}
private void buttonSelectProject_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dialogSelectProject = new OpenFileDialog();
dialogSelectProject.DefaultExt = ".sln";
dialogSelectProject.Filter = "Visual Studio Solution (.sln)|*.sln";
if (dialogSelectProject.ShowDialog() == true)
{
textBlockProjectName.Text = dialogSelectProject.FileName;
_isProjectChosen = true;
buttonAnalyzeProject.IsEnabled = true;
}
someFiles.Add("AnotherString.aspx");
}
private void buttonAnalyzeProject_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Click");
}
}
Однако, когда я запускаю свое приложение, Я не вижу три элемента в моем элементе управления, только один элемент . Почему это? Кроме того, правильное ли будет мое обязательное выражение? Так как я не привязываюсь к свойству строки, просто {Binding}
должно быть приемлемым, верно?