在我的用戶控件中,我有一個不是數據綁定的依賴項屬性。我查看了幾個堆棧溢出帖子,我無法弄清楚我做錯了什麼。 Property改變的方法從不被調用。我的代碼到目前爲止:WPF用戶控件不是數據綁定
我的用戶控件基本上是一個增強的組合框。 DP位於用戶控件內部。我在數據網格中使用這個用戶控件。
用戶控件的數據上下文像這樣設置。 的DataContext = {綁定的RelativeSource = {自我的RelativeSource}}
#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>
DataGrid綁定到一個ObservableCollection。集合中的每個對象都包含三個自動道具。
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
是的。數據網格的第一列正確綁定。 –