2015-06-29 4 views
1

Я создаю программно сетку прямоугольников, и каждый прямоугольник имеет внутри нее ярлык. Я обнаруживаю, какой прямоугольник был нажат с помощью команды Event. Моя проблема в том, что если я попытаюсь связать прямоугольник Name, я получаю эту ошибку: MarkupExtensions не допускаются для значений свойств Uid или Name, поэтому '{Binding ID}' недействителен Так что я могу получить имя только в том случае, если Я нажимаю на ярлык. Есть ли решение этой проблемы? Мой XAML:Программно связанное имя ItemsControl

<ItemsControl ItemsSource="{Binding CaskList}" HorizontalAlignment="Left" VerticalAlignment="Top"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas Width="1680" Height="800"> 
          <i:Interaction.Triggers> 
           <i:EventTrigger EventName="MouseLeftButtonDown" > 
            <cmd:EventToCommand Command="{Binding SelCaskCommand}" PassEventArgsToCommand="True" /> 
           </i:EventTrigger> 
          </i:Interaction.Triggers> 
         </Canvas> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemContainerStyle> 
        <Style TargetType="ContentPresenter"> 
         <Setter Property="Canvas.Left" Value="{Binding Left}"/> 
         <Setter Property="Canvas.Top" Value="{Binding Top}"/> 
        </Style> 
       </ItemsControl.ItemContainerStyle> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Grid> 
          <Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" ></Rectangle> 
          <Label Content="{Binding ID}" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
         </Grid> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

Я попытался связать rectanle просто используя

<Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" Name="{Binding ID}"> 

Класс привязываться к ItemsControl является

public class Cask 
{ 
    public string ID { get; set; } 
    public Int64 Left { get; set; } 
    public Int64 Top { get; set; } 
    public SolidColorBrush Color { get; set; } 
} 
+0

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

+0

Каков тип поля идентификатора? Можете ли вы показать объявление этого свойства? –

+0

Спасибо за ваш ответ, я отредактировал мой вопрос, чтобы показать вам привязку и класс – Parni

ответ

2

Нецелесообразно привязывать данные к свойству Name. Если вы связываете свойство name, имя становится динамическим. Если имена динамические, вы не можете ссылаться на элемент управления из кода. Следовательно, вы получили ошибку «MarkupExtensions не разрешены для значений свойств Uid или Name, поэтому« {Binding ID} »недействителен».

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

0

Я решил, используя тег вместо Имя