Silverlight 4 - объявить / заполнить свойство коллекции элемента управления через XAML? - PullRequest
4 голосов
/ 09 июня 2011

Прежде всего, я хотел бы поблагодарить всех вас за все ваши замечательные материалы.Я должен признать - StackOverflow был величайшим из доступных ресурсов для наставников, и поэтому он дал мне больше знаний, чем ... 4 года в "колледже".Спасибо!

Я работаю с элементом управления, у которого есть свойство, представляющее собой коллекцию объектов.

public class UserParameter
{
    string DisplayName { get; set; }
    string Property { get; set; }
    string Type { get; set; }
}

public class ParameterBuilder: UserControl
{
    private ObservableCollection<UserParameter> parameters;

    //alright - this is really dependency property.
    //described as property just for simplicity.
    public ObservableCollection<UserParamter> Parameters
    {
        get { return this.parameters; }
        set { this.parameters = value; }
    }
}

Итак, суть этого вопроса состоит в том, чтобы выяснить, как создать эту коллекцию вXaml.Например:

<custom:ParameterBuilder Name="Parameter">
    <custom:ParameterBuilder.Parameters>
        <custom:UserParameter DisplayName="Test 0" Property="Size"  Type="String"/>
        <custom:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal"/>
    </custom:ParameterBuilder.Parameters>
</custom:ParameterBuilder>

Возможно ли это, и если да, то как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Если вы используете .NET 4.0, вы сможете ссылаться на дженерики с параметром x: TypeArguments ( часть спецификации XAML2009 ) - так что наблюдаемая коллекция в вашем аргументе будет объявлена ​​следующим образом:

<ObservableCollection x:TypeArguments="UserParameter">
    <l:UserParameter DisplayName="Test 0" Property="Size" Type="String" />
    <l:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal" />
</ObservableCollection />
1 голос
/ 09 июня 2011

Как правило, свойства коллекции должны быть обычными (не зависимыми) свойствами, доступными только для чтения.Парсер XAML достаточно умен, чтобы добавлять элементы в свойства коллекции.Например:

public class ParameterBuilder: UserControl
{
    private ObservableCollection<UserParameter> parameters = new ObservableCollection<UserParameter>();

    // Don't make it a dependency property
    public ObservableCollection<UserParamter> Parameters
    {
        get { return this.parameters; }
    }
}

И вы можете использовать его так, как вы описываете:

<custom:ParameterBuilder Name="Parameter">
    <custom:ParameterBuilder.Parameters>
        <custom:UserParameter DisplayName="Test 0" Property="Size"  Type="String"/>
        <custom:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal"/>
    </custom:ParameterBuilder.Parameters>
</custom:ParameterBuilder>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...