我正在尝试从xaml实例化一个对象。对象的类继承自基类。一切都很好,除了基类属性(“Key”)没有从xaml正确设置。它始终为空。对象的属性本身可以从xaml设置为OK。此外,当我从代码设置Key属性时,它设置正常。
我在MainWindow方法的右括号上放置一个断点来查看对象数据。悬停细节告诉我Key属性始终为null。
任何想法我做错了什么?
<?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 :(得分:0)
确定我的问题。 Noob错了。需要将构建操作设置为None并始终复制。我已将构建操作设置为页面,因此它不是一个松散的xaml,并且没有更新到适当的文件夹。当我第一次无法弄清问题时,我手动将xaml文件复制到输出目录。这导致程序始终使用旧文件。
当我这样做时,还必须在xmlns的末尾添加“; assembly = Configurator”,以便它现在读取:“xmlns =”clr-namespace:Configurator.UiCore; assembly = Configurator“。然后它工作了。