WPF用户控制不是数据绑定



在我的用户控件中,我的依赖项属性不是数据绑定。我已经查看了几个堆栈溢出帖子,我无法弄清楚我在做什么错。属性更改的方法从未被调用。到目前为止,我的代码:

我的用户控制基本上是一个增强的组合框。DP生活在用户控制的内部。我正在使用数据网格内部的用户控件。

设置了用户控件的数据上下文。 dataContext = {binding reactracteRce = {versivationsource self}}

#region ProfileType DP
    public static FrameworkPropertyMetadata ProfileTypeMetaData = new FrameworkPropertyMetadata(ProfileTypes.Default,
                                                                 FrameworkPropertyMetadataOptions.BindsTwoWayByDefault |
                                                                FrameworkPropertyMetadataOptions.Journal, new PropertyChangedCallback(ProfileType_PropertyChanged),
                                                                new CoerceValueCallback(ProfileType_CoerceValue),
                                                                false, UpdateSourceTrigger.PropertyChanged);
    public static readonly DependencyProperty ProfileTypeProperty = DependencyProperty.Register(nameof(ProfileType), typeof(ProfileTypes),
                                                                  typeof(MyClass), ProfileTypeMetaData, new ValidateValueCallback(ProfileType_Validate));
    private static void ProfileType_PropertyChanged(DependencyObject dobj, DependencyPropertyChangedEventArgs e)
    {
        MyClass tp = (MyClass)dobj;
        tp.SetUpProfiles();
    }
    private static object ProfileType_CoerceValue(DependencyObject dobj, object Value)
    {
        return Value;
    }
    private static bool ProfileType_Validate(object Value)
    {
        return true;
    }
    public ProfileTypes ProfileType
    {
        get
        {
            return (ProfileTypes)this.GetValue(ProfileTypeProperty);
        }
        set
        {
            this.SetValue(ProfileTypeProperty, value);
        }
    }
    #endregion

在我的XAML文件中,我有以下内容:

<DataGrid ItemsSource="{Binding Missmatches}" CanUserAddRows="False" AutoGenerateColumns="False">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Target Profile" Binding="{Binding OldProfile}" />
          <DataGridTemplateColumn Header="Mismatched Profile">
             <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Tekla:TeklaProfiles SelectedProfile="{Binding NewProfile}" ProfileType="{Binding Type}" />
                  </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

数据摩擦绑定到观测值。集合中的每个对象都包含三个自动道具。

private ObservableCollection<ProfileMismatch> _missmatches;
        public ObservableCollection<ProfileMismatch> Missmatches
        {
            get { return _missmatches; }
            set
            {
                if (_missmatches == value)
                    return;
                _missmatches = value;
                RaisePropertyChanged(nameof(Missmatches));
            }
        }

无论我尝试什么,我似乎都无法将用户控制进入数据绑定。如果有人有一些专业提示,请告诉我。

设置了用户控件的数据上下文。 DataContext={Binding RelativeSource={RelativeSource Self}}

删除它。明确设置usercontrol的dataContext防止从控件的父母那里继承DataContext,例如这里:

<DataTemplate>
    <Tekla:TeklaProfiles SelectedProfile="{Binding NewProfile}"
                         ProfileType="{Binding Type}" />
</DataTemplate>

预计绑定将针对当前的数据台上文化解决,即具有NewProfileType属性的视图模型对象。但是,由于您已经明确设置了USERCONTROL(本身)的DataContext,因此它行不通。


因此,只是不要明确设置USERCONTROL的DataContext。绝不。任何博客或在线教程都告诉您这是错误的。

最新更新