我使用相同的ItemsControl来显示多个组合框。例如,根据绑定到ItemsControl的项目列表,使用相同的模板来显示有时带有一些名称的组合框,有时带有一些名字的组合框。
在模板中,ComboBox的SelectedValue只绑定到一个名为“ReceivedCBValue”的属性。所以,有时候,选定的值会给我名字,有时候会给我名字。但是我怎么知道我得到的是名字还是名字呢?
在另一种方式,我有同样的问题与文本框:相同的模板用于显示有时接收名字的文本框,有时接收名字的文本框。2同样,模板中的文本框仅绑定到一个属性“receivedTextValue”。
我同时显示我的几个文本框,当我在其中一个文本框中键入一些文本时,其他文本框显示我刚刚键入的文本。最后,我有多个文本框具有相同的值。绝对无用。
<ItemsControl Background="BurlyWood" Margin="20" Name="IcChoice"
ItemsSource="{Binding Items, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Width="350"
Height="200"
Tag="{Binding Tag, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5" Background="Brown"
Visibility="{Binding Visible, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- ComboBox Source is bound to the Children List, whereas its selectedValue is bound to ReceivedCBValue on the main DataContext ( Hello), so to the ViewModel -->
<ComboBox Grid.Column="0"
ItemsSource="{Binding Children}"
Visibility="{Binding ComboBoxVisibility}"
SelectedValue="{Binding DataContext.ReceivedCBValue, ElementName=Hello, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Grid.Row="1" />
<ComboBox Grid.Column="0"
ItemsSource=""></ComboBox>
<TextBox
Text="{Binding DataContext.ReceivedText,
ElementName=Hello,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"
Grid.Row="1" />
1条答案
按热度按时间63lcw9qa1#
我想我明白我错在哪里了,为什么。我使用那些ItemsControl和它们的内容来对List应用过滤器(或者ObservableCollection),在我理解之前,我想“直接”使用输入的值应用filter(这就是为什么我想在视图模型中获取值(
typedValue
-〉ViewModel.ReceivedValue
-〉applyFilter(ViewModel.ReceivedValue);
)。现在,我知道我必须在DisplayedIteml对象的属性中设置所有值,将这个对象发送到我的viewModel(或类似的东西),并对该对象的值应用我的过滤器。