2011-03-08 45 views
0

我试图从xaml实例化一个对象。该对象的类继承自基类。除了基类属性(“Key”)没有从xaml正确设置以外,一切都很好。它始终为空。该对象的属性本身在xaml中设置为OK。另外,当我从代码中设置Key属性时,它会设置好。从xaml创建对象时,基类属性始终为空

我在MainWindow方法的左括号上放置了一个断点来查看对象数据。悬停细节告诉我,Key属性始终为空。

任何想法我做错了什么?

<?xml version="1.0" encoding="utf-8" ?> 
<GroupUiItem xmlns="clr-namespace:Configurator.UiCore" 
     Key="key_grp1" UserName="grp1"> 
    <ParameterUiItem Key="key_par1" UserName="par1"/> 
    <GroupUiItem Key="key_grp2" UserName="grp2"> 
     <ParameterUiItem Key="key_par2" UserName="par2"/> 
     <ParameterUiItem Key="key_par3" UserName="par3"/> 
    </GroupUiItem> 
    <ParameterUiItem Key="key_par4" UserName="par4"/> 
    <ParameterUiItem Key="key_par5" UserName="par5"/> 
    <ParameterUiItem Key="key_par6" UserName="par6"/> 
</GroupUiItem> 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     GroupUiItem ConfigUi = new GroupUiItem(); 

     InitializeComponent(); 

     using (FileStream stream = new FileStream("XMLFile1.xaml", FileMode.Open, FileAccess.Read)) 
     { 
      ConfigUi = XamlReader.Load(stream) as GroupUiItem; 
     } 
     ConfigUi.Key = "key_grp1"; // this works OK 

     CategoryList.ItemsSource = ConfigUi.Children; 
    } 
} 

// These are in the Configurator.UiCore namespace: 

public class ConfiguratorUiItem 
{   
    protected string _Key; 
    public string Key 
    { 
     get { return _Key; } 
     set { _Key = value; } 
    } 
} 

[ContentProperty("Children")] 
public class GroupUiItem : ConfiguratorUiItem 
{   
    private ObservableCollection<ConfiguratorUiItem> _Children = new ObservableCollection<ConfiguratorUiItem>(); 
    public ObservableCollection<ConfiguratorUiItem> Children 
    { get { return _Children; } 
     set { _Children = value; } 
    } 

    private string _UserName; 
    public string UserName 
    { get { return _UserName; } 
     set { _UserName = value; } 
    } 
} 

public class ParameterUiItem : ConfiguratorUiItem 
{ 
    private string _ParameterType; 
    public string ParameterType 
    { 
     get { return _ParameterType; } 
     set { _ParameterType = value; } 
    } 

    private string _UserName; 
    public string UserName 
    { 
     get { return _UserName; } 
     set { _UserName = value; } 
    } 
} 

回答

0

好吧,想通了我的问题。 Noob错误。需要将生成操作设置为无并始终复制。我将构建操作设置为一个页面,所以它不是一个松散的xaml,并没有更新到适当的文件夹。当我第一次找不到问题时,我将xaml文件手动复制到输出目录。这导致程序始终使用旧文件。

当我这样做时,还必须在xmlns的末尾添加“; assembly = Configurator”,以便它现在读取:“xmlns =”clr-namespace:Configurator.UiCore; assembly = Configurator“。 。