Mik*_*ter 4 c# wpf binding listbox observablecollection
我有一个医生对象,其中一个属性是ObservableList诊所.它被用在窗口中以显示医生的详细信息.我可以获得单独的属性来绑定TextBox和ComboBox控制,但我无法获得绑定到我的诊所列表ListBox.
这是我的xaml ListBox:
<ListBox Height="318"
HorizontalAlignment="Left"
Margin="422,0,0,0"
Name="lbClinic"
VerticalAlignment="Top"
Width="158"
SelectedValue="{Binding ClinicID, Path=Clinics, Mode=TwoWay,
UpdateSourceTrigger = PropertyChanged}"
SelectedValuePath="ClinicID"
DisplayMemberPath="Name"
ItemsSource="{Binding DataContext.ClinicList,
ElementName = PhysicianInfoLookup, Mode = OneWay}"
SelectionMode="Multiple" />
Run Code Online (Sandbox Code Playgroud)
列表框正确填充ClinicList中的项目,ClinicList是所有可能诊所的列表.但是,我无法将医生对象中的诊所列表绑定,以便在列表框中选择它的项目.我也想反过来如果取消选择一个项目,医生对象中的ObservableList将相应地改变.
如何将我的医师对象中的ObservableList of Clinics双向绑定到我的Listbox中的Clinics列表(诊所对象的ObservableList)?
谢谢.
迈克,绑定问题很少.这是一个完整的样本,展示了一种做(我认为)你所追求的方法.
视图:
<Page.Resources>
<ViewModel:Physician x:Key="physician"/>
</Page.Resources>
<StackPanel DataContext="{StaticResource physician}" >
<TextBlock Text="{Binding Name}" Background="Orange"/>
<TextBlock Text="Works in:"/>
<ListBox ItemsSource="{Binding Clinics}"
SelectedValue="{Binding SelectedClinicId}"
SelectedValuePath="Id" DisplayMemberPath="Name" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
查看型号:
public class Physician
{
private int _selectedClinicId;
public Physician()
{
Name = "Overpaid consultant";
Clinics = new ObservableCollection<Clinic>
{
new Clinic {Id = 0, Name = "Out Patients"},
new Clinic {Id = 1, Name = "ENT"},
new Clinic {Id = 2, Name = "GE"},
};
}
public string Name { get; set; }
public IEnumerable<Clinic> Clinics { get; private set; }
public int SelectedClinicId
{
get { return _selectedClinicId; }
set
{
if (value != _selectedClinicId)
{
Debug.WriteLine(string.Format("setting clinic to: {0}",value));
_selectedClinicId = value;
}
}
}
}
public class Clinic
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,对于读/写属性,您可能希望引发属性更改通知.
您将需要使用包含TextBox名称和ListBox诊所的模板,并且只需将内部ListBox路径绑定到诊所即可。 DisplayMemberPath是一个捷径单TextBox。如果您想要更多,那么您需要单独的控制。
| 归档时间: |
|
| 查看次数: |
52207 次 |
| 最近记录: |