Sid*_*eus 1 c# wpf binding dependency-properties mvvm
我正在尝试制作一个包含 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);
}
Run Code Online (Sandbox Code Playgroud)
然后在 xaml 代码中我进行了绑定
<ListView Name="ListView"
PreviewMouseLeftButtonDown="ListViewPreviewMouseLeftButtonDown"
AllowDrop="True"
MouseMove="ListViewMouseMove"
DragEnter="ListViewDragEnter"
Drop="ListViewDrop"
SelectedItem="{Binding Path= SelectedItem}"/>
Run Code Online (Sandbox Code Playgroud)
为了确保它有效,我将 UserControl 作为 DataContext 分配给 ListView
public DragAndDropListView()
{
InitializeComponent();
ListView.ItemsSource = Items;
ListView.DataContext = this;
}
Run Code Online (Sandbox Code Playgroud)
然后我在使用 UserControl 的地方添加了一个绑定。
<userControls:DragAndDropListView
Items="{Binding SelectedCustomers}"
SelectedItem="{Binding SelectedCustomer}"
DisplayMemberPath="Name"
Grid.Column="0"
Grid.Row="0"/>
Run Code Online (Sandbox Code Playgroud)
正如您可能会看到的,我认为我不需要 SelectedItemPropertyChangedCallback。首先我什至没有实施它。我后来添加了它以添加断点来查看它是否有效。当我在 listView 中选择一个项目时,它会调用回调。但我的 ViewModel 中 SelectedCustomer 的 setter 从未被调用。
我希望这能起作用。请帮助我理解我的错误。
绑定必须是双向的:
SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
Run Code Online (Sandbox Code Playgroud)
您可以声明该属性,以便它默认绑定 TwoWay:
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(
nameof(SelectedItem),
typeof(object),
typeof(DragAndDropListView),
new FrameworkPropertyMetadata(
null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
SelectedItemPropertyChangedCallback));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |