Привязка к сетке данных в ActivityDesigner - PullRequest
1 голос
/ 16 апреля 2011

Я новичок в .NET 4 и ищу способ разработки настраиваемого действия, которое принимает список какого-либо типа (в моем примере FormInput).Таким образом, каждый экземпляр этого действия может содержать свой собственный закрытый список FormInput.

Этот codenippet от дизайнера действий, что я пытаюсь, что по какой-то причине не работает.Сетка данных отключается при использовании моей активности в рабочем процессе.

<Grid>...
   <DataGrid AutomationProperties.AutomationId="InputElements" 
      ItemsSource="{Binding Path=ModelItem.InputElements}" CanUserAddRows="True"
      CanUserDeleteRows="True"></DataGrid>
...
</Grid>

И это свойство пользовательского класса Activity, которое должно содержать список.

public ObservableCollection<FormInput> InputElements

Любая помощь приветствуется,

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Понял, думаю, проблема была в привязке к не перечисляемому объекту.

Привязка непосредственно к значению свойства ModelItem решила проблему

public partial class ActivityDesigner1
{
    public ObservableCollection<FormInput> MyProperty
    {
        get { return (ObservableCollection<FormInput>)ModelItem.Properties["InputElements"].ComputedValue; }
    }
}

А в конструкторе: <DataGrid ItemsSource="{Binding Path=MyProperty}"...

Вы можете сделать это, используя ValueConverter

Перейдите по этой ссылке , чтобы решить проблему добавления первого элемента

О, не забудьте инициализировать вашу коллекцию ObservableCollection

0 голосов
/ 24 ноября 2011

Проверьте, правильно ли установлен DataContext из DataGrid, и используйте фрагмент кода для сбора:

private ObservableCollection<FormInput> inputElements;

public ObservableCollection<FormInput> InputElements
{
    get
    {
        if (this.inputElements == null)
        {
            this.inputElements = new ObservableCollection<FormInput>();
        }

        return this.inputElements;
    }
}
...