Nano Hash - криптовалюты, майнинг, программирование

Привязка свойства элемента из ItemsControl к значению вне ItemsSource?

У меня есть ItemsControl, и у меня есть список людей. Каждый элемент в списке людей содержит имя человека и ничего больше. В коде C# я установил для testItemsControl.ItemsSource наблюдаемую коллекцию, содержащую имя каждого человека. Компания определяется в программном коде. Следующий код xaml правильно находит имя, но, конечно, не находит компанию.

    <ItemsControl x:Name="testItemsControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding Name}"/>
                    <TextBlock Text="{Binding Company}"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Как я могу правильно связать Компанию?

12.11.2012

Ответы:


1

Вы должны использовать привязку RelativeSource.

Код позади.

public partial class Window3 : Window
{
    public Window3()
    {
        InitializeComponent();
        this.DataContext = this;
        BuildData();
        Company = "XYZ";
        testItemsControl.ItemsSource = Persons;
    }

    private void BuildData()
    {
        Persons.Add(new Person() { Name = "R1" });
        Persons.Add(new Person() { Name = "R2" });
        Persons.Add(new Person() { Name = "R3" });
    }

    public string Company { get; set; }

    private ObservableCollection<Person> _persons = new ObservableCollection<Person>();

    public ObservableCollection<Person> Persons
    {
        get { return _persons; }
        set { _persons = value; }
    }
}

XAML-код

<ItemsControl x:Name="testItemsControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" Margin="5"/>
                    <TextBlock Text="{Binding Company, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Margin="5" />

                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Спасибо, Райникант.

12.11.2012
  • Большое спасибо за ваш ответ. Он прекрасно отвечает на заданный вопрос, но я должен был упомянуть, что предназначал его для разработки Windows Phone 8, которая, похоже, не поддерживает свойство AncestorType. Вы знаете альтернативное решение? 13.11.2012

  • 2

    Каждый определенный вами DataTemplate использует объект из ItemsControl.ItemsSource в качестве DataContext. В вашем случае это класс человека.

    Итак, внутри DataTemplate он ищет свойства Contents Name и Company. В данном случае Person.Name, Person.Company.

    Если вы хотите найти компанию, вы можете добавить свойство компании в класс человека или установить путь привязки, чтобы найти свойство компании. Последнее зависит от того, где вы определили свойство компании относительно itemsSource.

    12.11.2012
  • Спасибо за Ваш ответ. Для моей цели я не хочу добавлять свойство компании в класс человека. Можете ли вы рассказать мне больше о настройке пути привязки для поиска собственности компании? 12.11.2012

  • 3

    Создайте класс для хранения имени и компании, составьте свой список с объектами только что созданного типа и установите его в качестве источника элементов.

    internal class Worker 
    {
        public string Name { get; set; }
        public string Company { get; set; }
    }
    
    12.11.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..