WPF组合框SelectedItem问题

WPF组合框SelectedItem问题,wpf,wpf-controls,binding,prism,Wpf,Wpf Controls,Binding,Prism,我无法从WPF组合框实现非常简单的功能 我的组合框需要列出一组值。这个很好用。值id也成功保存在数据库中。问题是,当我想在编辑模式下打开窗口时,组合框保持为空。代码如下: <ComboBox Height="28" HorizontalContentAlignment="Center" Name="cmbActivity" ItemsSource="{Bi

我无法从WPF组合框实现非常简单的功能

我的组合框需要列出一组值。这个很好用。值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部分的某个地方,但我就是不知道在哪里,为什么

请帮忙

谢谢,

试试换衣服

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

致:



通过删除ElementName。将绑定源设置为自身是没有意义的,因为默认情况下数据上下文将推断出这一点。

我正在发布原始问题的答案。这是一个理想的方法:

  • 首先实现可克隆对象容器:

    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();
        }
    }
    
  • 然后使用此对象及其克隆方法创建分离的编辑对象:

             ClonableObjectContainer coc = new ClonableObjectContainer(actor);
             EntityObject editEntity = (EntityObject)coc.Data;
    
  • 执行更改后,从ObjectContext分离原始对象 ,附加克隆对象,将其状态更改为
    EntityState。已修改
    并正常保存:

            ContextManager.CurrentObjectContext.Detach(oldItem);
            ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
            ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified); 
            ContextManager.Save();
    
  • 希望对你有帮助。。。
    奥兰

    谢谢!虽然您是对的,但问题的来源完全不同,因为我使用克隆对象进行编辑。我将发布另一个关于它的问题+1给你!!
            ContextManager.CurrentObjectContext.Detach(oldItem);
            ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
            ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified); 
            ContextManager.Save();