簡體   English   中英

為什么我的依賴屬性綁定沒有按預期工作?

[英]Why is my Dependency Property Binding is not working as expected?

我正在嘗試制作一個包含 ListView 的自定義 UserControl。 我想將 SelectedItem 屬性綁定到我的視圖 Model。 因此,我在我的用戶控件中創建了一個 DP,並將 ListView 的 SelectedItem 屬性綁定到新的 Dependency 屬性。

        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。 首先,我什至沒有實施它。 我后來添加了它以添加一個斷點以查看它是否有效。 當我 select 列表視圖中的一個項目時,它會調用回調。 但是我的 ViewModel 中的 SelectedCustomer 的設置器永遠不會被調用。

我希望這能奏效。 請幫助我理解我的錯誤。

綁定必須是雙向的:

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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM