我无法找到为什么组合框绑定不起作用?
我有一个看起来像(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属性。
我在viewmodel中有一个方法来填充进程。 在我看来,我有一些类似的结构,我有一个树视图,它将绑定到进程,并在从树视图中选择任何项目时,我需要允许用户编辑该实体。
在视图中,组合框绑定如下:
<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
DisplayMemberPath="FolderName"
SelectedItem="{Binding Source={StaticResource viewModel}, Path=CurrentProcess.Folder, Mode=TwoWay}">
...
这个绑定不起作用我的意思是当我从树中选择任何对象时,它填充textBox中的ProcesName之类的其他信息,但它不会将Folder对象作为组合框中的选定项,但是组合框将是填充。
任何建议。
请参考:
答案 0 :(得分:0)
如果要以编辑支持的双向模式将ComboBox绑定到文件夹属性, 然后,您应该为组合框定义数据模板,然后将FolderInfo类的属性绑定到这些文本框 绑定显示成员路径不会解决您的问题
答案 1 :(得分:0)
我建议您使用适当的DisplayMemberPath
更改DataTemplate
:
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding FolderName}">
</StackPanel>
<DataTemplate>
这将修复SelectedItem
上下文。
答案 2 :(得分:0)
也许只是,你的Folderinfo类不是notificationObject。如果是这种情况,请确保它实现了INotifyPropertyChange。
答案 3 :(得分:0)
您必须使用SelectedValuePath和SelectedValue而不是如下所示的SelectedItem,
<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
DisplayMemberPath="FolderName"
SelectedValuePath="FolderId"
SelectedValue="{Binding Path=FolderId, Mode=TwoWay}">
SelectedItem绑定整个对象,而SelectedValue仅绑定对象的特定属性。