加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – WPF Listbox绑定

发布时间:2020-12-16 00:02:57 所属栏目:百科 来源:网络整理
导读:我有一个医生对象,其中一个属性是一个Observable诊所列表.它被用在窗口中以显示医生的详细信息.我可以获得绑定到TextBox和ComboBox控件的单个属性,但是我无法获取要绑定到ListBox的诊所列表. 这是我的ListBox的xaml: ListBox Height="318" HorizontalAlignm
我有一个医生对象,其中一个属性是一个Observable诊所列表.它被用在窗口中以显示医生的详细信息.我可以获得绑定到TextBox和ComboBox控件的单个属性,但是我无法获取要绑定到ListBox的诊所列表.

这是我的ListBox的xaml:

<ListBox Height="318" 
 HorizontalAlignment="Left" 
 Margin="422,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" />

列表框正确填充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>

查看型号:

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; }
}

请注意,对于读/写属性,您可能希望引发属性更改通知.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读