Wpf 在XAML中使用ObjectDataProvider绑定属性崩溃

Wpf 在XAML中使用ObjectDataProvider绑定属性崩溃,wpf,visual-studio-2008,xaml,Wpf,Visual Studio 2008,Xaml,很抱歉提出一个非常具体的问题,为什么VS2008和VS2010会使用此代码崩溃?我认为使用ObjectDataProvider绑定属性是很常见的。我在网上的很多地方都看到过这样的例子,但当我尝试使用它时,我发现异常,我的VS关闭了 那么,我的代码有什么问题?我应该为VS注册一个bug吗 <Window x:Class="ShortcutsManagementAddin.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/x

很抱歉提出一个非常具体的问题,为什么VS2008和VS2010会使用此代码崩溃?我认为使用ObjectDataProvider绑定属性是很常见的。我在网上的很多地方都看到过这样的例子,但当我尝试使用它时,我发现异常,我的VS关闭了

那么,我的代码有什么问题?我应该为VS注册一个bug吗

<Window x:Class="ShortcutsManagementAddin.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ShortcutsManagementAddin"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider x:Key="Window1" ObjectType="{x:Type local:Window1}" />
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="30" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="30" />
        </Grid.ColumnDefinitions>


        <TreeView ItemsSource="{Binding Source={StaticResource Window1}, Path=Categories}"></TreeView>
    </Grid>
</Window>

namespace ShortcutsManagementAddin
{
    public class Shortcut
    {
        public string CategoryName;
    }

    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        private List<Shortcut> categories = new List<Shortcut>();
        public List<Shortcut> Categories
        {
            get { return categories; }
        }

        public Window1()
        {
            categories.Add(new Shortcut { CategoryName = "Category 1" });
            categories.Add(new Shortcut { CategoryName = "Category 2" });
            categories.Add(new Shortcut { CategoryName = "Category 3" });
            categories.Add(new Shortcut { CategoryName = "Category 4" });
            categories.Add(new Shortcut { CategoryName = "Category 5" });

            InitializeComponent();
        }
    }
}

命名空间ShortcutsManagementAddin
{
公共类快捷方式
{
公共字符串类别名称;
}
/// 
///Window1.xaml的交互逻辑
/// 
公共部分类Window1:Window
{
私有列表类别=新列表();
公开名单类别
{
获取{返回类别;}
}
公共窗口1()
{
添加(新的快捷方式{CategoryName=“Category 1”});
添加(新的快捷方式{CategoryName=“Category 2”});
添加(新的快捷方式{CategoryName=“Category 3”});
添加(新的快捷方式{CategoryName=“Category 4”});
添加(新的快捷方式{CategoryName=“Category 5”});
初始化组件();
}
}
}

从您的代码示例来看,您似乎正在尝试从
Window1
的XAML中创建
Window1
的实例。考虑到这将导致无限循环,我可以看到应用程序或VisualStudio崩溃


如果要将集合的成员绑定到
TreeView
,最好创建一个单独的类(包含列表),并将该类的实例设置为窗口的
DataContext
。然后,通过将属性名称指定为路径,可以将
树视图的
项资源
绑定到该类的成员。VisualStudio2010RTM上的相同崩溃。我还尝试使用Window1。问题是,有时候设计师会毫无问题地显示绑定


似乎一定有办法使用Window1。

您有什么例外?在VS崩溃之前会发生什么?谢谢,我还没有意识到有新的对象被创建了。