WPF新手寻求指导

| 因此,大部分时间我住在ASP.NET MVC Land中-但是,现在,我正在尝试使用WPF为我们的解决方案制作一些分析工具(又名,它将计算代码行,哪些文件经过测试,提取)。来自属性等的元数据)。一切都进展顺利(我拥有的反射代码工作正常)。我遇到的麻烦是WPF ItemsControl。与传统的“ 0”相比,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}
对吧?     
已邀请:
<ItemsPanelTemplate>
    <StackPanel Orientation=\"Vertical\"></StackPanel>
</ItemsPanelTemplate>
将它作为项目添加到ItemsControl中,而不是将其设置为
ItemsPanel
,这是正确的方法:
    <ItemsControl>
        ...
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation=\"Vertical\"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
(无论如何,这都是多余的,因为默认面板已经是垂直的StackPanel)     
尝试在项目控件上设置ItemsSource
repeaterRecentProjects.ItemsSource = someFiles;
...snipped...
    
我已经解决了问题,但是可以使用一些指导来解决问题的原因。当我从XAML中删除以下节点时,它可以正常工作:
<ItemsPanelTemplate>
    <StackPanel Orientation=\"Vertical\"></StackPanel>
</ItemsPanelTemplate>
为什么要在商品集合中计算该模板?我的理解是,这只是它选择向其添加每个数据模板的容器项。     

要回复问题请先登录注册