나는 성공하지 못해서 이것을 알아 내려고 미쳤습니다.템플릿을 사용하여 ListBox 항목 바인딩하기
은 내가 DependencyObject에, ("userObject로")를 가지고있다. ObservableCollection 인 "DataItems"DependecyProperty가 있습니다. "UserDefiniton"은 DependencyProperty가 "Data"인 DependencyObject입니다. 데이터에는 DataType (열거 형)과 Value (문자열)의 두 가지 속성이 있습니다.
나는 그것의 ItemsSource로 "DataItems"속성을 사용하여 XAML에서 목록 상자를 정의하려합니다. ItemTemplate에는 여러 가지 컨트롤이 있습니다. 이 문제를 간단하게하기 위해 CheckBox와 TextBox를 사용하고 있습니다. DataType이 0 일 때 CheckBox를 사용할 수 있고 표시되도록하려면 DataType이 1 일 때 TextBox를 사용할 수 있고 표시되도록하고 싶습니다. 한 번에 하나의 컨트롤 만 사용할 수 있으며 표시 할 수 있습니다.이 작동 :
<ListBox
ItemsSource={Binding DataItems, Mode=OneWay}>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<CheckBox
Visibility="{Binding Path=Data.DataType, Mode=OneWay, Converter={StaticResource VisibilityConverter}, ConverterParameter=0}"
IsChecked="{Binding Path=Data.Value, Mode=TwoWay, Converter={StaticResource StringToBoolean}}" />
<TextBox
Visibility="{Binding Path=Data.DataType, Mode=OneWay, Converter={StaticResource VisibilityConverter}, ConverterParameter=1}"
Text="{Binding Path=Data.Value, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
<Listbox.ItemTemplate>
</ListBox>
문제는 하나의 표시에도 불구하고, 모두도 체크 박스 불구하고, 텍스트 상자에 표시됩니다합니다 (Data.Value 속성을 통해 체크 박스의 부울 싸우고 있다는 것입니다 숨겨져 있습니다.)
는 기본적으로, 그래도이 경우 바인딩 작업 -하지만 구현이 잘못되었습니다.그래서 템플릿을 사용하도록 전환했습니다. 내가 겪고있는 문제는 바인딩을 작동시키지 못한다는 것입니다.
이
내가 템플릿에 대해 가지고있는 코드입니다. 템플릿 선택은 제대로 작동하지만, 텍스트 상자의 텍스트 속성과 체크 박스의의 IsChecked 속성은 Data.Value에 바인딩되지 않습니다 바인딩<DataTemplate x:Key="TextBoxItem">
<TextBox
Text="{Binding Path=Data.Value, Mode=TwoWay}" />
</DataTemplate>
<DataTemplate x:Key="CheckBoxItem">
<CheckBox
IsChecked="{Binding Path=Data.Value, Mode=TwoWay, Converter={StaticResource StringToBoolean}}" />
</DataTemplate>
...
<ListBox
ItemsSource={Binding DataItems, Mode=OneWay}>
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl
Content="{Binding Path=Data.DataType, Mode=OneWay}"
ContentTemplateSelector="{DynamicResource UserDefinitionTemplateSelector}"/>
</DataTemplate>
<ListBox.ItemTemplate>
</ListBox>
그래서 어떻게 수정합니까?
Content
데이터 템플릿의
DataContext
되기 때문에
예 -이 그 것이었다. 문제를 과도하게 생각한 예. – Russ
주된 문제는 사람들이 "어려운"예외를 throw하지 않는 데이터 바인딩에 만족한다는 것입니다. 사람들이 첫 번째 질문을 던져야한다고 생각합니다. "어떻게하면이 디버깅을 할 수 있습니까?" –