![](/img/trans.png)
[英]Binding two objects with Combo Box SelectedItem WPF MVVM (ItemsControl)
[英]Combo box binding in mvvm
我无法找出为什么组合框绑定不起作用?
我有一个看起来像(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}">
...
这种绑定不起作用,是指当我从树中选择任何对象时,它会填充文本框内的其他信息(如ProcesName),但不会使Folder对象成为组合框中的选定项,但是组合框将被填充。
任何建议。
请参考以下内容:
如果要通过编辑支持以两种方式将ComboBox绑定到folders属性,则应为组合框定义数据模板,然后将FolderInfo类的属性绑定到那些文本框绑定显示成员路径将无法解决您的问题
我建议您使用适当的DataTemplate
更改DisplayMemberPath
:
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding FolderName}">
</StackPanel>
<DataTemplate>
这将修复SelectedItem
上下文。
也许只是,您的Folderinfo类不是NotificationObject。 如果是这种情况,请确保它实现了INotifyPropertyChange。
您必须使用SelectedValuePath和SelectedValue而不是如下所示的SelectedItem,
<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
DisplayMemberPath="FolderName"
SelectedValuePath="FolderId"
SelectedValue="{Binding Path=FolderId, Mode=TwoWay}">
SelectedItem绑定整个对象,而SelectedValue仅绑定对象的特定属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.