在XAML中使用ObjectDataProvider来绑定属性崩溃VS.

时间:2009-05-29 17:46:47

标签: wpf visual-studio-2008 xaml

很抱歉一个非常具体的问题,机器人为什么VS2008和VS2010崩溃了这段代码?我虽然使用ObjectDataProvider来绑定属性是很常见的。我在网上很多地方都看到了一些例子,但是我尝试使用它,我得到了异常,我的VS关闭了。

那么,我的代码出了什么问题?我应该为VS注册一个错误吗?

<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();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

如果要将集合的成员绑定到TreeView,最好创建一个单独的类(将包含列表),并将该类的实例设置为{{1窗口的。然后,您可以通过将属性名称指定为DataContext,将ItemsSource的{​​{1}}绑定到该类的成员。

答案 1 :(得分:0)

确认。 Visual Studio 2010 RTM上的崩溃相同。我也试过使用Window1。事实上,设计师有时会毫无问题地展示装订。

似乎必须有一种使用Window1的方法。