我试图通过点击包含项目的Visibility
之外的ListBoxItem
来更改CheckBox
内的ListBox
个元素,但它没有&# 39;似乎工作。
看起来绑定在ListBoxItems
内没有作用。
我正在为我的商品使用模板
XAML
<UserControl.Resources>
<local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<DataTemplate x:Key="ShotTemplate">
<Grid x:Name="GridItem" Width="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="ShotBox" Grid.Column="1" Text="{Binding Path=Description}" Visibility="{Binding EditMode, ElementName=EditMode, Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBlock x:Name="ShotBlock" Grid.Column="1" Text="{Binding Path=Description}" Visibility="{Binding EditMode, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=False }" />
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid>
<ListBox Name="ShotList" ItemsSource="{Binding AllShotsCollection}" ItemTemplate="{StaticResource ShotTemplate}"/>
<CheckBox Name="EditMode" IsChecked="{Binding EditMode}" Content="Edit Mode" HorizontalAlignment="Left" Margin="12,30,0,0" VerticalAlignment="Top"/>
</Grid>
视图模型
private bool _editMode = true;
public bool EditMode
{
get { return _editMode; }
set { _editMode = value; RaisePropertyChanged("EditMode"); }
}
如何通过选中或取消选中ShotBox
来更改ShotBlock
和Visibility
CheckBox
。我知道转换器工作正常,这不是它必须与绑定有关的问题。
答案 0 :(得分:0)
ElementName绑定范围仅在模板内。我将在 ListView (而不是ListViewItem)上定义一个附加属性,并让Checkbox切换该属性。在DataTemplate中,您将能够使用RelativeSource / FindAncestor绑定来查找ListView。
答案 1 :(得分:0)
这行xaml代码不起作用。您正在尝试绑定到view元素和viewmodel prop。在同一时间。
<TextBox x:Name="ShotBox" Grid.Column="1" Text="{Binding Path=Description}" Visibility="{Binding EditMode, ElementName=EditMode, Converter={StaticResource BooleanToVisibilityConverter}}" />
删除这个&#39; ElementName = EditMode&#39;这样它就可以正确绑定到viewmodel属性&#39; EditMode&#39;。 或者如果要绑定到视图元素,只需使用
Visibility="{Binding Path=IsChecked, ElementName=EditMode, Converter={StaticResource BooleanToVisibilityConverter}}" />