私のユーザコントロールには、データバインディングではない依存関係プロパティがあります。私はいくつかのスタックオーバーフローポストを見てきました。私は何が間違っているのか分かりません。 Property changedメソッドは呼び出されません。現在までのコード:WPF User Control Not Data Binding
私のユーザーコントロールは基本的に拡張コンボボックスです。 DPはユーザーコントロールの内部にあります。私はこのユーザーコントロールをデータグリッド内で使用しています。
ユーザーコントロールのデータコンテキストは、このように設定されています。 のDataContext =私は、次のしている私のXAMLファイルで
#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
を{RelativeSource = {RelativeSource自己を}}バインディング:
<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>
のDataGridはのObservableCollectionにバインドされています。コレクション内の各オブジェクトには、3つの自動小道具が含まれています。
private ObservableCollection<ProfileMismatch> _missmatches;
public ObservableCollection<ProfileMismatch> Missmatches
{
get { return _missmatches; }
set
{
if (_missmatches == value)
return;
_missmatches = value;
RaisePropertyChanged(nameof(Missmatches));
}
}
私が試しても、ユーザーコントロールをデータバインドにすることはできません。いずれかのプロのヒントがある場合は、私に知らせてください。
"データを含む私のクラス":グリッドには何が入っていますか?それはどのように見えるのですか? 'MyUserControls:Profiles'とは何ですか? 'ProfileType'はこれと何が関係していますか?ここで間違っていることがいくつかあるかもしれませんが、問題を再現するのに十分なコードを提供しない限り、推測することは不可能です。 –
ビューの 'DataContext'を正しく設定しましたか? – ChrisF
はい。データグリッドの最初の列が正しくバインドされます。 –