【问题标题】:WPF AutoCompleteBox binding .Text with Mode=TwoWay not working - .NET4.0WPF AutoCompleteBox 绑定 .Text 与 Mode=TwoWay 不工作 - .NET4.0
【发布时间】:2014-02-24 20:18:14
【问题描述】:

我的问题是:

我有这个MyAutoCompleteBoxACBoxDest(它继承自AutoCompleteBox,只是带有一个新事件EnterKeyDown,但这应该与我的问题无关)其中ItemsSource只是一个字符串列表代码隐藏。

我想将ACBoxDest 中的文本绑定到始终与我在代码隐藏中名为DestPath 的公共字段相同。

目前,当我在代码隐藏中更改 DestPath 变量时,它不会同时更改 gui 中的 ACBoxDest 文本。

.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 每次都会弹出。这意味着ACBoxDest 中的文本不等于DestPath,即使它们被绑定Mode=TwoWay。有谁知道为什么会发生这种情况以及我该如何解决?

非常感谢。谢谢。

【问题讨论】:

  • 用实际的AutoCompleteBox 替换你的控件,看看你是否有同样的问题。
  • 谢谢@Sheridan,我没有具体说明,但我已经尝试过了。同样的问题。

标签: c# wpf xaml binding autocompletebox


【解决方案1】:

如果您想在 Binding 中使用“DestPath”,您的“DestPath”必须是一个属性。

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

更多详情MSDN

根据下面的 cmets: 为了在属性更新时更新 UI,您的 VM 类需要实现 INotifyPropertyChanged,并且在 DestPath 的“设置”中,您需要引发属性更改事件。这个MSDN 链接有详细信息和示例代码。

【讨论】:

  • 谢谢。我几乎回答说我当然做了,但是当我仔细观察时,我意识到我遗漏了 {get;set;} 部分。这样就解决了一些问题。但是对 DestPath 的更改仍然不会更改 ACBoxDest.Text(又名 MessageBox 仍然会弹出)
  • 更新了我上面的答案。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2012-05-12
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多