WPF Привязка к конкретным элементам в коллекции - PullRequest
5 голосов
/ 11 ноября 2009

В настоящее время я пытаюсь привязать определенные элементы в коллекции в wpf. Это лучше всего объяснить на примере.

Мой XAML ниже:

<Canvas Name="TaskCanvas" Width="467.667" Height="414">
  <Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76"
           Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</Canvas>       

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

У меня есть код c # в событии window_load для привязки моего источника данных к моему эллипсу, как показано ниже:

PosClass posclass = new PosClass();
List<PosClass> posClasses = new List<PosClass>();

posclass.YPos = 100;
posclass.XPos= 100;            
posClasses.Add(posclass);

posclass.YPos = 0;
posclass.XPos = 0;
posClasses.Add(posclass);

TaskCanvas.DataContext = posClasses;

Теперь я сделал привязку к холсту из моей коллекции. PosClass - это простой класс с двумя свойствами: «XPos» и «YPos».

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

Что я хочу сделать, так это настроить эллипс на использование первого элемента в коллекции, вложенного в XAML, или, если у меня было больше элементов, скажем, 10-й элемент. Опять же, я хочу сделать это в XAML, поэтому в настоящее время у меня есть только привязка к позициям X и Y, есть ли какой-то синтаксис, который позволяет мне также указать, какую строку в коллекции использовать?

1 Ответ

7 голосов
/ 11 ноября 2009

Вы можете указать, к какому элементу вы хотите привязать, используя скобки:

<Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" Canvas.Left="{Binding Path=[10].XPos}" Canvas.Top="{Binding Path=[10].YPos}"/>

Если вы хотите связать все элементы в коллекциях, вам нужно использовать ItemsControl с ItemTemplate и ItemsPanel:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}"/>
    </ItemsControl.ItemTemplate>
</ItemsContol>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...