代码之家  ›  专栏  ›  技术社区  ›  user2879853

WPF AutoCompleteBox绑定。Mode=TwoWay的文本无法工作-.NET4.0

  •  1
  • user2879853  · 技术社区  · 12 年前

    我的问题是:

    我有这个 MyAutoCompleteBox , ACBoxDest (它继承自 AutoCompleteBox 只是一个新的事件 EnterKeyDown 但这应该与我的问题无关) ItemsSource 只是代码尾中设置的字符串列表。

    我想在里面绑定文本 ACBox目的地 始终与代码尾中的公共字段相同 DestPath .

    当前,当我更改 目标路径 变量,它也不会改变 ACBox目的地 gui中的文本。

    xaml:

    <MyACBox:MyAutoCompleteBox x:Name="ACBoxDest" FilterMode="StartsWith"
                               Text="{Binding Path=DestPath, Mode=TwoWay}"
                               ItemContainerStyle="{StaticResource containerStyle}"
                               Populating="ACBoxDestPopulating"
                               KeyboardNavigation.TabIndex="1"
                               EnterKeyDown="EnterKeyHandler"
                               GotFocus="ACBoxDestFocused"
                               LostFocus="ACBoxDestUnfocused" />
    

    代码尾:

    public string DestPath {get;set;}
    ...
    private void Initialize()
    {
       DestPath = _DEFAULT_TARGET_PATH;
       if (!ACBoxDest.Text.Equals(DestPath))
          MessageBox.Show("ACBoxDest.Text != DestPath");
    }
    

    ^为了简化调试说明 MessageBox 每次都会弹出。这意味着里面的文本 ACBox目的地 不等于 目标路径 即使他们被束缚 Mode=TwoWay 。有人知道为什么会发生这种情况,以及我如何解决它吗?

    非常感谢。谢谢

    1 回复  |  直到 12 年前
        1
  •  1
  •   Manish Basantani    12 年前

    如果要在Binding中使用“DestPath”,则它需要是一个属性。

    绑定的源可以是任何公共属性,包括 其他控件、公共语言运行库(CLR)对象的财产, XAML元素、ADO.NET数据集、XML片段等。

    更多详情请访问 MSDN

    根据以下评论: 为了在属性更新时更新UI,VM类需要实现INotifyPropertyChanged,并且在DestPath的“set”中需要引发属性更改事件。这 MSDN 链接包含详细信息和示例代码。

    推荐文章