Я хочу показать не необязательные данные из файла XML в C #, но я никогда не использовал их раньше, и я новичок в методе сериализации.
У меня есть XSD с:
<xs:attribute name="SpecialtyCd" type="xs:string" />
<xs:attribute name="DoctorUid" type="xs:string" />
<xs:attribute name="ValidFrom" type="xs:date" use="optional"/>
<xs:attribute name="ValidUntil" type="xs:date" use="optional"/>
И у меня есть оператор FillEditWindow (), где я динамически создаю метки и текстовые поля:
private void FillEditWindow(PropertyInfo p, object dc, Type t)
{
object[] attributes = p.GetCustomAttributes(true);
bool ignore = attributes.Any(a => a.ToString().Contains("XmlIgnoreAttribute"));
if (!ignore)
{
Label lbl = new Label();
whatCategorieName = p.Name;
var whatCategorieSource = p.GetValue(dc, null);
lbl.Content = whatCategorieName + ':';
lbl.FontFamily = new FontFamily("Verdana");
lbl.FontWeight = FontWeights.Bold;
lbl.Width = 400;
EditControls.Children.Add(lbl);
//Check if Date//
if (p.PropertyType == typeof(DateTime))
{
DatePicker datePicker = new DatePicker();
datePicker.Name = whatCategorieName;
datePicker.Width = 400;
DateTime dateSource = DateTime.Parse(whatCategorieSource.ToString());
if (dateSource.ToString() != "1/01/0001 0:00:00")
{
datePicker.SelectedDate = dateSource;
}
datePicker.DisplayDateStart = new DateTime(1980, 1, 1);
datePicker.DisplayDateEnd = new DateTime(2050, 12, 31);
datePicker.FirstDayOfWeek = DayOfWeek.Monday;
EditControls.Children.Add(datePicker);
}
//Check if Boolean
else if (p.PropertyType == typeof(Boolean))
{
Boolean trueOrFalse = Convert.ToBoolean(whatCategorieSource);
CheckBox boxTrueOrFalse = new CheckBox();
boxTrueOrFalse.Name = whatCategorieName;
boxTrueOrFalse.Width = 400;
EditControls.Children.Add(boxTrueOrFalse);
//Check if true or false
if (trueOrFalse == true)
{
boxTrueOrFalse.IsChecked = true;
}
else if (trueOrFalse == false)
{
boxTrueOrFalse.IsChecked = false;
}
}
//Check if String
else if (p.PropertyType == typeof(string))
{
TextBox txt = new TextBox();
txt.Width = 400;
if (whatCategorieSource != null)
{
txt.Name = whatCategorieName;
txt.Text = whatCategorieSource.ToString();
}
else
{
txt.Name = whatCategorieName;
txt.Text = "";
}
EditControls.Children.Add(txt);
}
Можно ли проверить с помощью оператора if, является ли атрибут необязательным или нет?
Также, если это поможет, я получу свои данные (когда я нажимаю на определенный элемент в TreeView, я получаю экран редактирования со всеми атрибутами в нем):
private void TextBlock_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
var dc = ((FrameworkElement)e.OriginalSource).DataContext;
selectedItemHosp = null;
selectedItemList = null;
selectedItemExamDef = null;
if (dc != null && dc is HospitalWrapper)
{
if (dc is HospitalWrapper && !((HospitalWrapper)dc).IsTitle)
{
var context = ((HospitalWrapper)dc).Context;
selectedItemHosp = (HospitalWrapper)dc;
canSave = true;
string edit = ((TextBlock)sender).Text.ToString();
labelEdit.Text = ((TextBlock)sender).Text.ToString();
Type t = context.GetType();
PropertyInfo[] pi = t.GetProperties();
EditControls.Children.Clear();
EditControlsLayout.Visibility = Visibility.Visible;
sourceOfEdit = "Hospitals";
//Change Data
foreach (PropertyInfo p in pi)
{
if (p.PropertyType == typeof(string) || p.PropertyType == typeof(DateTime) || p.PropertyType == typeof(Boolean))
{
FillEditWindow(p, context, t);
}
}
}