WPF XAML Generics Class Binding - PullRequest
       0

WPF XAML Generics Class Binding

1 голос
/ 09 июня 2011

Можете ли вы связать в XAML с классом, который принимает тип T?

Если у меня есть класс myCLASS<T> и я хочу связать List<myClass<int>> с XAML, вы можете это сделать?

Или вам нужно написать оболочку class newMyClass: myClass<int> и затем связать XAML с newMyClass?

Спасибо.

Ответы [ 3 ]

1 голос
/ 09 июня 2011

Подсистема связывания WPF поддерживает любые типы объектов, структур, классов, универсальных классов и даже динамических объектов. Все, что имеет значение, - это то, что экземпляры имеют свойства .

Вы не можете создавать универсальные классы в ресурсах типичного приложения WPF, поскольку синтаксис создания объекта не поддерживает его. Тем не менее, объекты, созданные в выделенном коде, в вашей модели представления или сервисами (даже если они являются экземплярами универсальных типов или вложенных универсальных типов), все равно могут участвовать в связывании.

Вот пример, основанный на вопросе. Вот немного XAML для окна:

<Grid>
    <ListBox ItemsSource="{Binding}" Padding="10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding X}"/>
                    <TextBlock Text=" , "/>
                    <TextBlock Text="{Binding Y}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

и вот обобщенный класс, который похож на Point класс:

class myClass<T>
{
    public T X { get; set; }
    public T Y { get; set; }
}

и ниже приведен код для поддержки связывания в XAML:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new List<myClass<int>>
    {
        new myClass<int> { X = 1, Y = 2 },
        new myClass<int> { X = 3, Y = 4 },
    };
}

и вот как это выглядит:

Generic Binding

Мы создали экземпляры универсального класса в выделенном фрагменте кода, но привязаны к этим данным с использованием XAML.

1 голос
/ 09 июня 2011

XAML 2009 поддерживает его с использованием x:TypeArguments, но на данный момент это неудобный вариант, поскольку он не поддерживается компилятором XAML в BAML от Microsoft. Для XAML 2009 вам придется читать XAML, используя XamlReader самостоятельно, но затем потерять большую функциональность, как в коде. Лучше всего делать так, как вы предлагали в данный момент.

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

Кристиан Мозер дал демонстрацию использования TypeArguments в по этой ссылке для привязки к общим коллекциям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...