MVVM Вложенная привязка данных - PullRequest
0 голосов
/ 21 октября 2010

У меня возникают проблемы с привязкой данных внутри UserControl при использовании ItemsControl, у которого есть ItemsSource.Мой Eventtrigger никогда не вызывается.

Думаю, проблема в том, что когда я вызываю свой eventtrigger в строке:

<cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />

, он пытается найти проверенное событие в коллекции CheckBoxes, потому что я установилмой ItemsSource, в то время как он должен искать в своем родителе.Я искал решение в течение нескольких дней, но ни один из них, похоже, не работает.

Мой код выглядит следующим образом:

<Grid x:Name="layoutroot">
            <ItemsControl x:Name="itemcontrol" ItemsSource="{Binding CheckBoxes}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical"></StackPanel>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <s:SurfaceCheckBox Background="White" Foreground="White">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="Checked">
                                    <cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </s:SurfaceCheckBox>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>

Когда я пытаюсь следующий код, он работает точно так же, какожидается:

<Grid x:Name="layoutroot">
    <s:SurfaceCheckBox Background="White" Foreground="White" Content="{Binding Content}" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Checked">
                <cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </s:SurfaceCheckBox>
</Grid>

Но мне действительно нужно это поведение внутри itemsControl с установленным ItemsSource.

Есть идеи?

1 Ответ

1 голос
/ 21 октября 2010

Связывание внутри ItemsControl помещается на текущий Предмет в коллекции.Что вам нужно сделать, это найти родителя и связать оттуда.

Дайте эту попытку изнутри вашего ItemsControl, заменив MyUserControlName:

<cmd:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyUserControlName} }, Path=DataContext.Checked}" />
...