WPF Combobox SelectedItem Проблема - PullRequest
       20

WPF Combobox SelectedItem Проблема

0 голосов
/ 04 октября 2010

Мне не удается получить очень простую функциональность из ComboBox WPF.

Мой ComboBox должен перечислить коллекцию значений. Это отлично работает. Значение id также успешно сохраняется в базе данных. Проблема в том, что когда я хочу открыть окно в режиме редактирования, комбо остается пустым. Вот код:

            <ComboBox Height="28" 
                  HorizontalContentAlignment="Center" 
                  Name="cmbActivity"
                  ItemsSource="{Binding Path=Unit.UnitActivities}"
                  SelectedValuePath="Id"
                  SelectedValue="{Binding Path=UnitActivityId}"
                  Style="{StaticResource comboBoxInError}" 
                  Width="200" 
                  Margin="6" 
                  HorizontalAlignment="Left">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock FlowDirection="LeftToRight" Text="{Binding Path=ActivityTime.Name}" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
            <ComboBox.SelectedItem>
                <Binding ElementName="cmbActivity" Path="UnitActivityId" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <ExceptionValidationRule />
                        <val:NotEmptyValidationRule />
                        <val:UnitResTimeOverlapValidationRule />
                    </Binding.ValidationRules>
                </Binding>
            </ComboBox.SelectedItem>
        </ComboBox>

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

Пожалуйста, помогите ..

Спасибо

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Попробуйте изменить

<Binding ElementName="cmbActivity" Path="UnitActivityId" UpdateSourceTrigger="PropertyChanged">

до:

<Binding Path="UnitActivityId" UpdateSourceTrigger="PropertyChanged">

, удалив ElementName. Нет смысла устанавливать для себя источник привязки, поскольку контекст данных по умолчанию выводит это.

0 голосов
/ 18 октября 2010

Выкладываю ответ на оригинальную проблему. Это идентично: Проблема редактирования клонированного / отдельного объекта WPF - что такое стандарт?

  1. Сначала внедрите свой контейнер клонируемых объектов:

    public class ClonableObjectContainer : Object , ICloneable
    {
        private Object data;
    
        public ClonableObjectContainer(Object obj)
        {
            data = obj;
        }
    
        public Object Data
        {
            get { return data; }
        }
    
        public object Clone()
        {
            return (ClonableObjectContainer)this.MemberwiseClone();
        }
    }
    
  2. Затем используйте этот объект с его методом Clone для создания вашего отдельного объекта редактирования:

             ClonableObjectContainer coc = new ClonableObjectContainer(actor);
             EntityObject editEntity = (EntityObject)coc.Data;
    
  3. После внесения изменений отсоедините исходный объект от ObjectContext , прикрепите клонированный объект, измените его состояние на EntityState.Modified и изящно сохраните:

            ContextManager.CurrentObjectContext.Detach(oldItem);
            ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
            ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified); 
            ContextManager.Save();
    

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

...