WPF AutoCompleteBox绑定.Text与Mode = TwoWay不工作 - .NET4.0

时间:2014-02-24 20:18:14

标签: c# wpf xaml binding autocompletebox

我的问题是:

我有MyAutoCompleteBoxACBoxDest(它仅从AutoCompleteBox继承新事件EnterKeyDown,但这与我的问题无关){{1}只是代码隐藏中设置的字符串列表。

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

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

.xaml:

ACBoxDest

代码隐藏:

<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。有谁知道为什么会发生这种情况以及如何解决它?

非常感谢。感谢。

1 个答案:

答案 0 :(得分:1)

如果要在Binding中使用它,则“DestPath”必须是属性。

  

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

MSDN

的更多详情

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