wpf를 배우면서 간단한 프로그램을 만들고 있는데요
리스트박스의 데이터 템플릿에 유저컨트롤을 쓰는데
바인딩이 적용이 안되는 것 같아서 해결 방법을 알고 싶어서 글 올립니다.
대충 이런 유저컨트롤이 있습니다.
public partial class EditableLabel : UserControl
{
public static DependencyProperty OutTextProperty;
public string OutText
{
get => (string)GetValue(OutTextProperty);
set => SetValue(OutTextProperty, value);
}
static EditableLabel()
{
InitializeComponent();
var meta = new FrameworkPropertyMetadata();
meta.AffectsRender = true;
OutTextProperty = DependencyProperty.Register(nameof(OutText), typeof(string), typeof(EditableLabel), meta);
}
}
바인딩을 시도하는 xaml 부분입니다.
<ListBox ItemsSource="{Binding Characters}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type model:Character}">
<!-- 문제되는 부분-->
<view:EditableLabel OutText="{Binding Name}">
<!-- -->
</view:EditableLabel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
여기서 Binding Name이 의도한 대로 작동을 안 합니다.
제가 의도한 것은 바인딩된 Character 객체의 Name이 OutText에 설정되어 리스트박스에 추가되는 것인데
아무런 동작을 안하는 것 같습니다.
디버그 찍어보니 OutText 프로퍼티가 전혀 안 불리더군요.
혹시 DataContext 문제인가 했는데 제대로 Character 객체가 들어가는 것을 확인했습니다.
그런데도 Character 객체의 Name이 OutText로 할당이 안됩니다.
어디가 잘못된 것인지를 잘 모르겠습니다.
바인딩 설정을 다르게 해야하는 것일까요?