绑定只能使用ElementName,为什么?

时间:2014-04-25 16:14:32

标签: wpf binding

以下是我的方案的一些代码片段。在.xaml方面,我有一个ItemsControl:

<ItemsControl ItemsSource="{Binding StatList}" ItemTemplate="{StaticResource statBox}"></ItemsControl>

StatList只是一个对象列表。

DataTemplate包含此TextBlock

                    <TextBlock x:Name="DataTextBlock" Background="Transparent" DockPanel.Dock="Top" HorizontalAlignment="Center"
                        Foreground="White" FontSize="11">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="Loaded">
                            <iBehaviors:InvokeMethodTrigger Method="UpdateBinding"
                                    Target="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"
                                    Parameter="{Binding ., RelativeSource={RelativeSource AncestorType=TextBlock}}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </TextBlock>

这是我第一次在ViewModel上设置StatList时,TextBlock本身作为参数传递给InvokeMethodTrigger。但是,如果我在viewmodel上更改StatList,则下次Loaded事件发生时,当触发InvokeMethodTrigger时,Parameter为null。

奇怪的是,当我将参数绑定更改为:

Parameter="{Binding ElementName=DataTextBlock}"

当我更改我的StatList时,它第二次工作,TextBlock作为参数传递。我的生活无法弄明白为什么!有什么解释吗?

1 个答案:

答案 0 :(得分:-1)

你可以在后面的代码中这样做:

    SlatList slat = new SlatList();
    ItemControl.ItemSource = slat;
    ItemControl.DataContext = slat;

确保指定itemcontrol的名称并替换&#34; ItemControl&#34;这个名字。

在XAML中:

  <ItemsControl ItemsSource="{Binding StatList}" DataContext="{Binding SlatList} ItemTemplate="{StaticResource statBox}"> </ItemsControl>