我在具有依赖属性的用户控件和我有一个自定义类作为数据上下文中的模型的窗口之间存在半工作绑定的坏情况。
我的窗户
<src:BaseWindow x:Class="Levscan.Wpf.Controls.DialogWindows.SystemSettingsDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:src="clr-namespace:Levscan.Wpf.Controls.Abstract"
xmlns:ctrl_io="clr-namespace:Levscan.Wpf.Controls.Controls.IO"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<ctrl_io:DirectoryBrowser Width="250" SelectedPath="{Binding Path=PathInbox, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
</src:BaseWindow>
我的用户控件
<UserControl Name="DirectoryBrowserUC" x:Class="Levscan.Wpf.Controls.Controls.IO.DirectoryBrowser"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="53" d:DesignWidth="392">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding ElementName=DirectoryBrowserUC, Path=SelectedPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Style="{StaticResource TextBoxInError}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Column="0" Margin="5,0" />
<Button Margin="5,0" Content="..." Grid.Column="1" Click="OnBrowse_Click" />
</Grid>
我的用户控件 - 代码背后
public partial class DirectoryBrowser : UserControl
{
public static readonly DependencyProperty SelectedPathProperty =
DependencyProperty.Register("SelectedPath", typeof(string), typeof(DirectoryBrowser));
public string SelectedPath
{
get { return this.GetValue(SelectedPathProperty) as string; }
set { this.SetValue(SelectedPathProperty, value); }
}
}
当我启动我的窗口时,我加载了一个继承 INotifyPropertyChanged 接口的自定义类。设置新数据时,我的属性会执行 NotifyPropertyChanged()。
当我在用户控件中启动我的文本框时,我的窗口中的数据和窗口 DataContext 中的自定义类会更新(到目前为止一切都很好)。
但是,我注意到,当我直接编辑文本框(输入新文本)或使用它旁边的按钮并使用 Windows 目录对话框选择新路径时,我在 DataContext 中的属性没有更新。
我尝试了各种绑定变体,但没有任何效果,要么没有加载数据,要么我无法更改值。
我怀疑我的绑定在某个地方有点偏离。
更新
似乎我在上面的代码中需要的只是在控件窗口的绑定上添加 Mode=TwoWay 。由于我换掉了东西并添加了我从未注意到这是唯一缺少的东西,所以当我真正拥有它时,其他东西就消失了。