Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将自定义DependencyProperty绑定到ListView.SelectedItem时出现问题_C#_Wpf_Xaml - Fatal编程技术网

C# 将自定义DependencyProperty绑定到ListView.SelectedItem时出现问题

C# 将自定义DependencyProperty绑定到ListView.SelectedItem时出现问题,c#,wpf,xaml,C#,Wpf,Xaml,我试图实现的绑定有问题。它将更新DP一次,但在此之后,它将不再更新 在XAML中,我有两个绑定到listview.selected项的控件 及 每次更改listview的选定项时,textblock都会按预期进行更新 我的自定义控件创建依赖项属性,如下所示: public class MapControl : UserControl { public MapData MapData { get { return (MapData)GetValue(MapDataP

我试图实现的绑定有问题。它将更新DP一次,但在此之后,它将不再更新

在XAML中,我有两个绑定到listview.selected项的控件

每次更改listview的选定项时,textblock都会按预期进行更新

我的自定义控件创建依赖项属性,如下所示:

public class MapControl : UserControl
{
  public MapData MapData
    {
        get { return (MapData)GetValue(MapDataProperty); }
        set { SetValue(MapDataProperty, value); }
    }

    public static readonly DependencyProperty MapDataProperty =
        DependencyProperty.Register("MapData", typeof(MapData), typeof(MapControl),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.AffectsRender,
                new PropertyChangedCallback(OnMapDataPropertyChanged),
                new CoerceValueCallback(OnMapCoerceValue)
            )
        );

    private static void OnMapDataPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue != null)
        {
            ((MapControl)source).MapData = (MapData)e.NewValue;                
        }
    }

    private static object OnMapCoerceValue(DependencyObject dpo, Object obj)
    {           
        return obj;
    }
    ...
}

我几乎不知所措,不知道从这里该怎么办。非常感谢您提供的任何帮助。

不确定您到底想实现什么,也不确定您的代码为何显得如此复杂。如果你解释得更多,有人可能会为你提供一个更简单的解决方案

也就是说,听起来问题很简单,就是您正在用一个本地值覆盖绑定。这看起来像是罪魁祸首:

((MapControl)source).MapData = (MapData)e.NewValue;

执行此操作时,
MapControl.MapData
属性将不再绑定到“.”而将采用您指定的任何值。因此,您的
MapControl.DataContext
属性可能完全正确,但它不会被传输到
MapData
属性,因为您破坏了绑定。

我上周也遇到了同样的错误。我的解决方案很简单:当显式定义
dependencProperty
时,还必须显式地将模式定义为双向

<TextBlock DataContext="{Binding ElementName=availableMapsListView,
 Path=SelectedItem}"
 Text="{Binding Name, Mode=TwoWay}" />

谢谢,这确实是罪魁祸首。我一拿出那条线,它就按预期工作了。