ObservableCollection не отражает изменения в DataGrid - PullRequest
1 голос
/ 17 февраля 2012

Я реализовал DataGrid следующим образом:

    <DataGrid 
    x:Name="MyDataGridFilter"
    ItemsSource="{Binding}"
    IsSynchronizedWithCurrentItem="True"
    AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn 
                x:Name="FilterTextCol01">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBox 
                            Grid.Column="0"
                            IsHitTestVisible="True"
                            Text="{Binding Path=FilterTextCol01}" />
                        <CheckBox 
                            Grid.Column="1"
                            x:Name="FilterAktivTextCol01"
                            IsHitTestVisible="True"
                            IsChecked="{Binding Path=FilterAktivTextCol01}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

Привязка в коде идет следующим образом:

FilterItemsList = new ObservableCollection<DataGridFilterEntity>();
MyDataGridFilter.DataContext = FilterItemsList;

(оно замкнуто) FilterItemsList реализован как класс INotifyPropertyChanged:

public class DataGridFilterEntity : INotifyPropertyChanged

С членом FilterTextCol01 (конечно):

public string FilterTextCol01
    {
        get { return _FilterTextCol01; }
        set
        {
            _FilterTextCol01 = value;
            Changed("FilterTextCol01");
        }
    }

Все отлично работает. Когда я изменяю FilterItemsList, DataGrid повторно отображает эти изменения. Но когда я делаю некоторые изменения в пользовательском интерфейсе (в DataGrid), это не отражается в ObservableCollection (FilterItemsList).

Я искал и пробовал несколько часов, но не нашел решения. Кто-нибудь знает как это решить? Спасибо!

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Вам необходимо двухстороннее связывание.

Например,

 <TextBox 
                        Grid.Column="0"
                        IsHitTestVisible="True"
                        Text="{Binding Path=FilterTextCol01, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
   <CheckBox 
                        Grid.Column="1"
                        x:Name="FilterAktivTextCol01"
                        IsHitTestVisible="True"
                        IsChecked="{Binding Path=FilterAktivTextCol01, Mode=TwoWay}"/>
0 голосов
/ 17 февраля 2012

Какие изменения вы делаете в GUI? Вы обновляете Text TextBox и проверяете CheckBox?

Если так, то тот же самый пример работает в моем случае. Я получаю обновленный текст и проверяю логическое значение в моей модели, когда фокусируюсь на текстовом поле или флажке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...