почему ComboBox selectedItem не вызывает установленный метод доступа - PullRequest
0 голосов
/ 19 марта 2012

В моем проекте я связываю наблюдаемую коллекцию с сеткой данных.Каждый столбец Datagrid имеет поле со списком, которое является связанным свойством и возвращает список строк.Выбранный элемент поля со списком связан с другим свойством моей наблюдаемой коллекции.Аксессуар get отлично работает в поле со списком, но набор не работает.Мне нужно, чтобы это работало, потому что мне нужно сохранить изменения в моей базе данных.

Вот некоторая часть моего XAML

<DataGrid  SelectedItem="{Binding SelectedPartProperty, Mode=TwoWay}"
              ItemsSource="{Binding AllPartProperties}" AutoGenerateColumns="False" Grid.Row="1" Margin="416,6,302,0">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding PropertyName,Mode=TwoWay}" IsReadOnly="false"/>
            <DataGridTemplateColumn Header="Data Type" IsReadOnly="false">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox SelectedItem="{Binding PropertyDataType, Mode=TwoWay}"
                           ItemsSource="{Binding DataType}" 
                           Background="White" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

Моя модель основного вида

public ObservableCollection<PartPropertyViewModel> AllPartProperties
    {
        get
        {
            if (SelectedPartNumber == null)
            {
                _allProperties = new ObservableCollection<PartPropertyViewModel>();
                return _allProperties;
            }
            PartPropertyViewModel tempPartPropertyViewModel;
            ObservableCollection<PartPropertyViewModel> newPartPropertyViewModel = new ObservableCollection<PartPropertyViewModel>();
            foreach (PartProperty p in SelectedPartNumber.PartNumberEntity.PartProperties)
            {
                tempPartPropertyViewModel = new PartPropertyViewModel(p);
                newPartPropertyViewModel.Add(tempPartPropertyViewModel);
            }

            _allProperties = newPartPropertyViewModel;
            return _allProperties;
        }
        set
        {
            _allProperties = value;              

        }

    }

Другой видМодель

class PartPropertyViewModel : ViewModelBase
{
    private PartProperty _partPropertyEntity;      
    private string _propertyDataType;
    private string[] _dataType;
    private PartParameterViewModel _partParameters;

    public PartPropertyViewModel(PartProperty partProperty)
    {
        PartPropertyEntity = partProperty;
        _partParameters = new PartParameterViewModel(partProperty);
    }

    //public PartPropertyViewModel()
    //{
    //    //PartPropertyEntity = new PartProperty();           
    //}


    public PartProperty PartPropertyEntity
    {
        get 
        {
            return _partPropertyEntity;
        }
        set 
        {
            _partPropertyEntity = value;
        }
    }
    public string PropertyName
    {
        get
        {
            if (PartPropertyEntity == null ||  PartPropertyEntity.ConfigurationProperty == null)
                return "";
            else
                return PartPropertyEntity.ConfigurationProperty.chrCPProperty;
        }
        set
        {
            PartPropertyEntity.ConfigurationProperty.chrCPProperty = value;
            OnPropertyChanged("PropertyName");
        }
    }

    public string[] DataType
    {
        get 
        {
            _dataType = new string[] { "Number", "String"};                
            return _dataType;
        }
        set
        {
            _dataType = value;
            OnPropertyChanged("DataType");
            OnPropertyChanged("PropertyDataType");
        }

    }
    public string PropertyDataType
    {
        get
        {
            if (PartPropertyEntity == null || PartPropertyEntity.ConfigurationProperty == null)
                return "";

            if (PartPropertyEntity.ConfigurationProperty.bitCPIsNumeric)
                _propertyDataType = DataType[0];
            else
                _propertyDataType = DataType[1];
            return _propertyDataType;
        }
        set
        {
            _propertyDataType = value;

            if (String.Compare(value,"Number") == 0)
                PartPropertyEntity.ConfigurationProperty.bitCPIsNumeric = true;
            else
                PartPropertyEntity.ConfigurationProperty.bitCPIsNumeric = false;

            OnPropertyChanged("PropertyDataType");
        }
    }



    public PartParameterViewModel PartParameters
    {
        get
        {
           return  _partParameters;
        }
    }

}//end of class

1 Ответ

0 голосов
/ 19 марта 2012

Вы привязываетесь к массиву строк

  public string[] DataType 

Строка не имеет свойства PropertyDataType, и я сомневаюсь, что метод get также вызывается.

Необходимо связать с коллекцией, такой как List или ObservableCollection

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