내가이 DependencyProperty
로 설정 한 Template
특성을 가진 UserControl
있습니다WPF는 속성을 바인딩 할 수 없습니다,하지만 난 그것을 등록
public partial class TemplateDetail : UserControl
{
public static readonly DependencyProperty _templateProperty =
DependencyProperty.Register(
"Template",
typeof(Template),
typeof(TemplateDetail)
);
public TemplateDetail()
{
InitializeComponent();
Template = new Template();
DataContext = Template;
}
public Template Template
{
get
{
return (Template)GetValue(_templateProperty);
}
set { SetValue(_templateProperty, value); }
}
}
내가 시도하고를 Window
, SaveTemplateDialog의 XAML이 UserControl
를 사용하고, 내 SaveTemplateDialog
클래스의 Template
재산의 Template
속성을 설정하기 위해 노력하고있어 :
<local:TemplateDetail HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
MinWidth="100" Template="{Binding}"
Width="{Binding ElementName=Scroller, Path=ViewportWidth}"/>
DataContext
(SaveTemplateDialog
)은 Template
속성으로 설정되며 이는 또한 종속성 속성입니다. 그러나, 위의 XAML에 대한 Template="{Binding}"
는 비주얼 스튜디오에서 파란색으로 밑줄과는 말한다 :
타입 A의 '템플릿'속성 'TemplateDetail'을 설정할 수 없습니다 '바인딩'. 'Binding'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다. 나는 그것의 값이있는 알고 물론 충분히
, 나는 내 응용 프로그램을로드 할 때, 표시 할 Template
TemplateDetail
그 시도의 내용이 비어 있습니다. 종속성 속성으로 TemplateDetail.Template
을 등록한 경우이 메시지가 표시되는 이유는 무엇입니까?
편집 : 지금은 상당히 혼란 스럽습니다. 나는 또한 값 I을 보여줍니다 SaveTemplateDialog
에서이 XAML을 가지고 있기 때문에 올바른 데이터를 받고있다 Path=NewTemplate
을 알고
<local:TemplateDetail HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
TemplateData="{Binding Path=NewTemplate, Mode=OneWay}"
Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"/>
: 내 SaveTemplateDialog
창에서, 나는하여 TemplateDetail
UserControl
에 템플릿을 따라 통과하는 다음과 같은 일을 해요 NewTemplate
의 MyType
속성에 기대 : TextBlock
내가 기대하는 것을 보여줍니다
<TextBlock Text="{Binding Path=NewTemplate.MyType}" />
있다. 그러나 올바른 데이터가 TemplateDetail
에 없거나 제대로 바인딩되지 않은 것 같습니다. 왜냐하면 MyType
속성 (또는 다른 Template
속성)을 TemplateDetail
에 표시 할 수 없기 때문입니다. TemplateDetail
인 : 지금 여기
<TextBlock Text="{Binding Path=TemplateData.MyType}" Grid.Row="2" Grid.Column="2"
HorizontalAlignment="Stretch" Width="200"/>
그리고 TemplateDetail
클래스의 :
public partial class TemplateDetail : MainWindowUserControl
{
public static readonly DependencyProperty TemplateDataProperty =
DependencyProperty.Register(
"TemplateData",
typeof(Template),
typeof(TemplateDetail),
new PropertyMetadata(
new Template("Default Template", null)
)
);
public TemplateDetail()
{
InitializeComponent();
DataContext = this;
}
public Template TemplateData
{
get
{
return (Template)GetValue(TemplateDataProperty);
}
set { SetValue(TemplateDataProperty, value); }
}
}
템플릿이 여기에 예약어 인 경우 내 머리 꼭대기에서 잘 모르겠습니다. 다른 이름의 종속성 속성을 시도 했습니까? – Robaticus
@Robaticus :'TemplateDetail.Template' 속성의 이름을'TemplateData'로 변경했습니다. 청색 선을 없애고 구속력을 경고합니다. 내 앱을 실행할 때 여전히 템플릿의 데이터가 표시되지 않지만 다른 문제 일 수 있습니다. 감사! 답변을 추가해야합니다. –