可见性绑定到模板内的ListboxItems

时间:2015-08-02 05:30:08

标签: c# wpf mvvm listbox datatemplate

我试图通过点击包含项目的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来更改ShotBlockVisibility CheckBox。我知道转换器工作正常,这不是它必须与绑定有关的问题。

2 个答案:

答案 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}}" />