1

我无法找出为什么组合框绑定不起作用?

我有一个看起来像(2 个属性)的视图模型

    public ProcessMaintenanceDataObject CurrentProcess
    {
        get
        {
            return _CurrentProcess;
        }
        set
        {
            _CurrentProcess = value;
            OnPropertyChanged("CurrentProcess");
        }
    }

    public ObservableCollection<ProcessMaintenanceDataObject > Processes 
    {
        get
        {
            return _Processes;
        }
        set
        {
            _Processes = value;
            OnPropertyChanged("Processes");
        }
    }

    public ObservableCollection<FolderInfo> Folders
    {
        get
        {
            return _folders;
        }
        set
        {
            _folders = value;
            OnPropertyChanged("Folders");
        }
    }

以下是 ProcessMaintenanceDataObject 定义

    [DataMember]
    public string ProcessName
    {
        get
        {
            return _ProcessName;
        }
        set
        {
            _ProcessName = value;
            OnPropertyChanged("ProcessName");
        }

    }


    [DataMember]
    public string Id
    {
        get
        {
            return _Id;
        }
        set
        {
            _Id = value;
            OnPropertyChanged("Id");
        }
    }

    [DataMember]
    public string FolderId
    {
        get
        {
            return _FolderId;
        }
        set
        {
            _FolderId = value;
            OnPropertyChanged("FolderId");
        }
    }

    [DataMember]
    public FolderInfo Folder
    {
        get
        {
            return _Folder;
        }
        set
        {
            _Folder = value;
            if (_Folder != null)
                FolderId = _Folder.FolderId;
            OnPropertyChanged("Folder");
        }
    }

FolderInfo 类具有 FolderName 和 FolderId 属性。

我在视图模型中有一个填充进程的方法。在我看来,我的结构类似于,我有一个将绑定到进程的树视图,并且在从树视图中选择任何项目时,我需要允许用户编辑该实体。

在视图中,组合框绑定如下:

<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
          DisplayMemberPath="FolderName" 
          SelectedItem="{Binding  Source={StaticResource viewModel}, Path=CurrentProcess.Folder, Mode=TwoWay}">
...

此绑定不起作用我的意思是,当我从树中选择任何对象时,它会填充文本框中的 ProcesName 等其他信息,但它不会将 Folder 对象作为组合框中的选定项目,但是组合框将被填充。

任何建议。

请参考:

4

4 回答 4

0

我建议您进行DisplayMemberPath适当的更改DataTemplate

<DataTemplate>
  <StackPanel>
     <TextBlock Text="{Binding FolderName}">
  </StackPanel>
<DataTemplate>

这将修复SelectedItem上下文。

于 2013-08-27T09:59:03.450 回答
0

如果您想以具有编辑支持的两种方式将 ComboBox 绑定到您的文件夹属性,那么您应该为您的组合框定义数据模板,然后将 FolderInfo 类的属性绑定到这些文本框绑定显示成员路径不会解决您的问题

于 2013-08-27T08:13:51.383 回答
0

也许只是也许,您的 Folderinfo 类不是 notificationObject。如果是这种情况,请确保它实现了 INotifyPropertyChange。

于 2013-08-28T10:28:39.083 回答
0

您必须使用 SelectedValuePath 和 SelectedValue 而不是 SelectedItem ,如下所示,

<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
          DisplayMemberPath="FolderName"
          SelectedValuePath="FolderId" 
          SelectedValue="{Binding Path=FolderId, Mode=TwoWay}">

SelectedItem 绑定整个对象,而 SelectedValue 仅绑定对象的特定属性。

于 2018-09-28T06:10:55.780 回答