我瘋了,試圖找出沒有成功。綁定列表框項目使用模板
我有一個DependencyObject(「UserObject」)。它有一個「DataItems」DependecyProperty,它是一個ObservableCollection。 「UserDefiniton」是具有「Data」的DependencyProperty的DependencyObject。數據有兩個屬性:DataType(一個枚舉)和Value(一個字符串)。
我想在使用「DataItems」屬性作爲其ItemsSource的XAML中定義一個ListBox。在ItemTemplate中,我有幾個不同的控件。爲了簡化這個問題,我使用了一個CheckBox和一個TextBox。我希望CheckBox在DataType爲0時可用並可見,而我希望TextBox在DataType爲1時可用並可見。每次只能有一個控件可用並可見。
這工作:
<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屬性(複選框的布爾值會在文本框中顯示,即使該複選框被隱藏)。
基本上,雖然在這種情況下綁定工作 - 但實施是不正確的。
所以,我切換到使用模板。我遇到的問題是我無法使綁定工作。
這是我對模板的代碼。模板選擇器工作正常,但TextBox的Text屬性和複選框的財產器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>
那麼,如何解決這個綁定?
是 - 這是它。過度思考問題的一個例子。 – Russ
主要問題是人們對數據綁定感到滿意,而不會拋出「硬」異常,但人們應該知道的第一個問題是:「我如何調試呢?」。 –