Легкий инструментарий MVVM Interaction.Triggers не срабатывает в табличке данных - PullRequest
2 голосов
/ 14 марта 2011

Я могу использовать Interaction.Triggers, чтобы перехватить текстовое событие в текстовом поле, например, так:

<TextBox  Text="{Binding Title}" Style="{StaticResource GridEditStyle}">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="TextChanged">
                            <cmd:EventToCommand Command="{Binding TextChanged}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </TextBox>

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

 <ListView  ItemsSource="{Binding LangaugeCollection}" SelectedItem="{Binding SelectedLangauge}" BorderThickness="0" FontFamily="Calibri" FontSize="11">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Width="200">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate >
                                    <Grid>
                                        <TextBlock Text="{Binding Title}" Style="{StaticResource GridBlockStyle}">
                                        </TextBlock>
                                        <TextBox  Text="{Binding Title}" Style="{StaticResource GridEditStyle}">
                                            <i:Interaction.Triggers>
                                                <i:EventTrigger EventName="TextChanged">
                                                    <cmd:EventToCommand Command="{Binding TextChanged}" />
                                                </i:EventTrigger>
                                            </i:Interaction.Triggers>
                                        </TextBox>
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView> 
                </ListView.View>
            </ListView>

событие не сработает.

Кто-нибудь знает, почему это не сработает и как это исправить?

Ответы [ 2 ]

8 голосов
/ 15 марта 2011

Когда вы находитесь в DataTemplate, DataContext может не соответствовать вашим ожиданиям.Обычно DataContext в DataTemplate устанавливается на элемент, который представляет DataTemplate.Если ваша команда TextChanged находится на «основной модели представления» вместо элемента данных, вам нужно быть более точным в способе указания привязки данных, например:

Command = "{Binding Source = {StaticResource Locator}, Path = Main.TextChanged} "

Вы можете увидеть проблему, когда вы запускаете код в режиме отладки (F5) в Studio и наблюдаете окно вывода.Ошибка данных будет отображаться, если DataContext установлен неправильно.

Cheers, Laurent

0 голосов
/ 14 марта 2011

Кажется, что-то обрабатывает событие до TextBox. Может быть, вы могли бы прослушать свойство Title (коллекцию), измененное внутри вашей ViewModel, потому что в любом случае вы, я полагаю, вызываете TextChanged для ViewModel внутри триггера.

Кстати, я думаю, вам не хватает режима TwoWay в выражении привязки.

Надеюсь, это поможет.

...