none
WPF使用Label绑定ComboBox中SelectedItem文本,始终得不到结果。 RRS feed

  • 问题

  • ComboBox

    <ComboBox Name="authCodes" Grid.Column="0" Grid.Row="1" DisplayMemberPath="Code" SelectedIndex="{Binding ElementName=authDesc, Path=SelectedIndex, Mode=OneWay}" />

    现在ComboBox显示正常

    Label

    <Label Grid.Column="0" Grid.Row="2" Content="{Binding ElementName=authCodes, Path=SelectedItem}" />

    刚打开窗口的时候,Label为空,没有任何值。

    ComboBox中选定项目改变的时候,Label中也不发生改变。

    所以Label就一直是空白。

    请求帮忙。。。

    2014年6月16日 1:44

答案

  • 你好。

    可以通过绑定Label的DataContext和Content的方式来实现。

    使用SelectedItem绑定到DataContext,然后使用想要的字段名绑定到Content,例如:Code。

    下面是我的一个简单的示例:

    XAML:

    <ComboBox Name="authCodes" Height="40" DisplayMemberPath="Code"/>
    <Label DataContext="{Binding ElementName=authCodes, Path=SelectedItem}" Content="{Binding Code}" VerticalAlignment="Top" Height="40"/>

    C#:

    List<Demo> codes = new List<Demo>();
    codes.Add(new Demo() { Code = "123" });
    codes.Add(new Demo() { Code = "223" });
    codes.Add(new Demo() { Code = "323" });
    
    authCodes.ItemsSource = codes;

    Demo类:

    public class Demo
    {
        public string Code { get; set; }
    }

    2014年6月16日 2:13

全部回复

  • 你好。

    可以通过绑定Label的DataContext和Content的方式来实现。

    使用SelectedItem绑定到DataContext,然后使用想要的字段名绑定到Content,例如:Code。

    下面是我的一个简单的示例:

    XAML:

    <ComboBox Name="authCodes" Height="40" DisplayMemberPath="Code"/>
    <Label DataContext="{Binding ElementName=authCodes, Path=SelectedItem}" Content="{Binding Code}" VerticalAlignment="Top" Height="40"/>

    C#:

    List<Demo> codes = new List<Demo>();
    codes.Add(new Demo() { Code = "123" });
    codes.Add(new Demo() { Code = "223" });
    codes.Add(new Demo() { Code = "323" });
    
    authCodes.ItemsSource = codes;

    Demo类:

    public class Demo
    {
        public string Code { get; set; }
    }

    2014年6月16日 2:13
  • 你好。

    可以通过绑定Label的DataContext和Content的方式来实现。

    使用SelectedItem绑定到DataContext,然后使用想要的字段名绑定到Content,例如:Code。

    下面是我的一个简单的示例:

    XAML:

    <ComboBox Name="authCodes" Height="40" DisplayMemberPath="Code"/>
    <Label DataContext="{Binding ElementName=authCodes, Path=SelectedItem}" Content="{Binding Code}" VerticalAlignment="Top" Height="40"/>

    C#:

    List<Demo> codes = new List<Demo>();
    codes.Add(new Demo() { Code = "123" });
    codes.Add(new Demo() { Code = "223" });
    codes.Add(new Demo() { Code = "323" });
    
    authCodes.ItemsSource = codes;

    Demo类:

    public class Demo
    {
        public string Code { get; set; }
    }

    ComboBox原来就是绑定了从数据库查询出来的结果的。

    你提供的这种模式,我还没有看明白到底怎么回事呢,能不能在我原来的基础上进一步加工。

    研究一下再说。。。3Q

    2014年6月16日 6:31
  • 好的。

    之前咱们一起解决过两个ComboBox相互绑定的问题以及后续的一些问题,我大致了解你现在数据绑定的机制。

    说一下现在这个问题的解决思路,你按照你实际的数据模型稍作调整就行。

    我把Label分两步来做绑定:

    1. DataContext绑定到ComboBox的SelectedItem(这里要保证你的SelectedItem有值,且是一个实体结构,例如你前面提到的Authority)

    2. Content属性绑定到这个实体结构下面某个属性,例如Code。这是因为DataContext是Authority的示例,所以Code属性能取到对应的值。

    希望能帮到你,有任何问题,再反馈给我。

    2014年6月16日 7:16