为啥我的依赖属性绑定没有按预期工作?
Posted
技术标签:
【中文标题】为啥我的依赖属性绑定没有按预期工作?【英文标题】:Why is my Dependency Property Binding is not working as expected?为什么我的依赖属性绑定没有按预期工作? 【发布时间】:2021-07-31 21:07:57 【问题描述】:我正在尝试制作一个包含 ListView 的自定义 UserControl。我想将 SelectedItem 属性绑定到我的视图模型。因此,我在我的用户控件中创建了一个 DP,并将 ListView 的 SelectedItem 属性绑定到新的依赖属性。
public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register(
"SelectedItem",
typeof(object),
typeof(DragAndDropListView),
new PropertyMetadata(SelectedItemPropertyChangedCallback));
private static void SelectedItemPropertyChangedCallback(DependencyObject d,
DependencyPropertyChangedEventArgs e)
if (d is DragAndDropListView dragAndDropListView)
public object SelectedItem
get => GetValue(SelectedItemProperty);
set => SetValue(SelectedItemProperty, value);
然后我在 xaml 代码中进行了绑定
<ListView Name="ListView"
PreviewMouseLeftButtonDown="ListViewPreviewMouseLeftButtonDown"
AllowDrop="True"
MouseMove="ListViewMouseMove"
DragEnter="ListViewDragEnter"
Drop="ListViewDrop"
SelectedItem="Binding Path= SelectedItem"/>
为了确保它正常工作,我将 UserControl 作为 DataContext 分配给 ListView
public DragAndDropListView()
InitializeComponent();
ListView.ItemsSource = Items;
ListView.DataContext = this;
然后我在使用 UserControl 的地方添加了一个绑定。
<userControls:DragAndDropListView
Items="Binding SelectedCustomers"
SelectedItem="Binding SelectedCustomer"
DisplayMemberPath="Name"
Grid.Column="0"
Grid.Row="0"/>
如您所见,我认为我不需要 SelectedItemPropertyChangedCallback。首先,我什至没有实施它。我后来添加了它以添加一个断点以查看它是否有效。当我在 listView 中选择一个项目时,它会调用回调。但是我的 ViewModel 中的 SelectedCustomer 的设置器永远不会被调用。
我希望这能奏效。请帮助我理解我的错误。
【问题讨论】:
【参考方案1】:绑定必须是双向的:
SelectedItem="Binding SelectedCustomer, Mode=TwoWay"
您可以声明该属性,使其默认绑定 TwoWay:
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(
nameof(SelectedItem),
typeof(object),
typeof(DragAndDropListView),
new FrameworkPropertyMetadata(
null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
SelectedItemPropertyChangedCallback));
【讨论】:
哦,我根本没想到。非常感谢。以上是关于为啥我的依赖属性绑定没有按预期工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在数据模板中使用 xaml UserControl 时无法绑定到依赖属性? [复制]
为啥WPF里面的PasswordBox的Password属性不是依赖属性?