Кнопка фиксации DataForm не активна при изменении данных - PullRequest
1 голос
/ 18 марта 2010

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

Посмотрев немного, я обнаружил, что мне нужно реализовать IEditableObject, чтобы отменить редактирование. Отлично, я сделал это (и все это работает), но теперь кнопка фиксации (Сохранить) неактивна, лол. У кого-нибудь есть идеи, почему кнопка фиксации больше не активируется?

Xaml

<df:DataForm x:Name="_dataForm"                      
             AutoEdit="False"
             AutoCommit="False"
             CommandButtonsVisibility="All">                     
    <df:DataForm.EditTemplate >
        <DataTemplate>
            <StackPanel Name="rootPanel"
                Orientation="Vertical"
                df:DataField.IsFieldGroup="True">
                <!-- No fields here. They will be added at run-time. -->                        
            </StackPanel>
        </DataTemplate>
    </df:DataForm.EditTemplate>
</df:DataForm>

1011 * связывание *

DataContext = this;
_dataForm.ItemsSource = _rows;

...

TextBox textBox = new TextBox();                                        
Binding binding = new Binding();
binding.Path = new PropertyPath("Data");
binding.Mode = BindingMode.TwoWay;
binding.Converter = new RowIndexConverter();
binding.ConverterParameter = col.Value.Label;

textBox.SetBinding(TextBox.TextProperty, binding);
dataField.Content = textBox;

// add DataField to layout container
rootPanel.Children.Add(dataField);

Определение класса данных

public class Row : INotifyPropertyChanged , IEditableObject
        {                               
            public void BeginEdit()
            {
                foreach (var item in _data)
                {
                    _cache.Add(item.Key, item.Value);
                }
            }

            public void CancelEdit()
            {
                _data.Clear();

                foreach (var item in _cache)
                {
                    _data.Add(item.Key, item.Value);
                }

                _cache.Clear();

            }

            public void EndEdit()
            {
                _cache.Clear();

            }

            private Dictionary<string, object> _cache = new Dictionary<string, object>();

            private Dictionary<string, object> _data = new Dictionary<string, object>();

            public object this[string index]
            {
                get
                {
                    return _data[index];
                }
                set
                {
                    _data[index] = value;

                    OnPropertyChanged("Data");
                }
            }

            public object Data
            {
                get { return this; }
                set
                {
                    PropertyValueChange setter = value as PropertyValueChange;
                    _data[setter.PropertyName] = setter.Value;
                }
            }

            public event PropertyChangedEventHandler PropertyChanged;

            protected void OnPropertyChanged(string property)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(property));
                }
            }
        }

1 Ответ

0 голосов
/ 31 марта 2010

Когда вы создаете поля в коде позади, они фактически создаются только в форме, а не «в памяти». Вы можете попробовать это самостоятельно, нажав на кнопку «Отмена», при повторном редактировании форма будет пустой, и поля необходимо будет восстановить.

Поэтому, когда вы создаете поля, вам нужно поместить следующий код для фактического создания полей.

 if (_dataForm.Mode == DataFormMode.Edit)
                {
                    _dataForm.CommitEdit();
                    _dataForm.BeginEdit();
                }

Когда вы сделаете это, кнопки будут работать как положено.

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