2011-03-08 82 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「。 。