Как изменить пользовательский тип на Системный тип (строку) в WPF XAML?
Возможный дубликат:
Как использовать вложенный класс в WPF XAML?
Я рефракторил код из примера:
- 24.129.21. Связывание основных деталей
из C# / Учебник CSharp "Windows Presentation Foundation" Привязка)
И после исключения класса навыков, с соответствующими изменениями в
в MainWindow.xaml
<local:Team>
<local:Employee Name="Larry" Age="21">
<local:Employee.Skills>
<!-- local:Skills -->
<local:Skills>
Я имею в MainWindow1.xaml.cs:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfApplication
{
public class Skill
{//I'd like to remove class Skill having moved property string Description into class Employee
public string Description { get; set; }
}
public class Employee
{
public string Name { get ; set; }
public int Age { get; set; }
//I'd like to change in the next line Skill --> String
public List<Skill> Skills { get; set; }
//public List<String> Skills { get; set; }
public Employee()
{
//I'd like to change in the next line Skill --> String
Skills=new List<Skill>();
//Skills=new List<string>();
}
}
public class Team : ObservableCollection<Employee> { }
public class Company
{
public string CompanyName { get ; set; }
public Team Members { get ; set; }
}
public class Companies : ObservableCollection<Company> { }
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
}
Как я должен изменить Window1.XAML, если изменить:
List<Skill>
вList<String>
в Window1.xaml.cs?
Связанные вопросы, основанные на том же коде:
Обновить:
Просто чтобы заметить, что я ошибся:
- "А" вместо А (без кавычек);
- так должно быть
String
(но нетstring
) в XAML (в то время как в C# либоstring
или жеString
) - попытался поместить A как атрибут, в соответствии с существующим кодом, в один тег
<sys:String />
вместо:<sys:String>A</sys:String>
1 ответ
Решение
Вот ваш класс Employee с новым подходом, который вы хотели, чтобы он был похож -
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public List<String> Skills { get; set; }
public Employee()
{
Skills=new List<string>();
}
}
Вы можете создать экземпляр в файлах xaml для того же, как это -
<local:Team x:Key="teams">
<local:Employee Name="Larry" Age="21">
<local:Employee.Skills>
<sys:String>A</sys:String>
<sys:String>B</sys:String>
<sys:String>C</sys:String>
</local:Employee.Skills>
</local:Employee>
</local:Team>
Вам нужно определить sys
пространство имен в вашем xaml для объявления экземпляра строки в xaml -
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Я тестировал приведенный выше код с ListBox
и его работа -
<ListBox ItemsSource="{Binding Skills, Source={StaticResource teams}}"/>