none
原页面中设置bindinggroup有效,但是把其中一部分做成单独控件就在大页面的BindingGroup中找不到小控件的bindinggroup了,怎么办? RRS feed

  • 问题

  •       <Canvas Canvas.Left="0"   Canvas.Top="36">
                        <Label Content=" 泄露:"></Label>
                        <Label  Canvas.Left="77" Width="30">
                            <Binding Path="[ /Facility/@H2Leak]" BindingGroupName="bindingGroup">
                                <Binding.Converter>
                                    <cvt:SignalConverter></cvt:SignalConverter>
                                </Binding.Converter>
                            </Binding> 
                        </Label>
                    </Canvas>

    这样写在页面里,后来我把

     <Label  Canvas.Left="77" Width="30">
                            <Binding Path="[ /Facility/@H2Leak]" BindingGroupName="bindingGroup">
                                <Binding.Converter>
                                    <cvt:SignalConverter></cvt:SignalConverter>
                                </Binding.Converter>
                            </Binding> 
                        </Label>这段提取出来放到一个控件里面,在页面中就找不到这个bindinggroup了,导致数据不会被刷新,有什么好方法可以让它找到呢?

    2012年2月24日 9:29

答案

  • BindingGroupName 作用范围还是和Element Name作用域一致的,看这篇文档:http://msdn.microsoft.com/en-us/library/ms746659.aspx

    由于 BindingBase。BindingGroupName只是个一般的属性,不是依赖属性,不能绑定,而且只接受字符串,所以我们无法在他上面做手脚。只能让我们的 BindingGroup 名字在你的控件范围里面再次注册一下名字:

    例如你的Window中有个BindingGroup (注意,只能用BindingGroup Name属性命名,而不是x:Name):

      <StackPanel x:Name="stackpanel">
        <StackPanel.BindingGroup>
          <BindingGroup Name="bindingGroup"/>
        </StackPanel.BindingGroup>
        <local:UserControl1 x:Name="control"/>
      </StackPanel>
    然后我们在后面注册这个名字到UserCotnrol范围里:
    control.RegisterName("bindingGroup", stackpanel.BindingGroup);

    在UserControl里面就可以使用了:
      <StackPanel>
        <TextBox x:Name="textbox">
          <TextBox.Text>
            <Binding Path="." BindingGroupName="bindingGroup">
            </Binding>
          </TextBox.Text>
        </TextBox>
        <Button Content="click" Click="Button_Click"/>
      </StackPanel>

    Sincerely, 

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年2月28日 2:52
    版主