首页 > 解决方案 > 列表框在运行时从后面的代码修改项目的数据模板

问题描述

我有这个列表框

<ListBox x:Name="lbsample" ItemsSource="{Binding CurrentSettings}" SelectionMode="Extended">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem"  >
            <Setter Property="Focusable" Value="False"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <GroupBox x:Name="gb0" Margin="0" Background="Transparent">
                <GroupBox.Header>
                    <CheckBox x:Name="chk0" Content="xxx" 
                      IsChecked="{Binding Path=DataContext.IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" />
                </GroupBox.Header>
                <!---->
                <StackPanel Orientation="Horizontal" IsEnabled="{Binding Path=IsEnabled}" >
                    <TextBlock x:Name="lbltxt" Text="yyy" 
                       HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5,5,5,10"/>
                </StackPanel>
            </GroupBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

加载掩码时,我想从后面的代码中以编程方式更改文本“xxx”和“yyy”,我该怎么做?我无法访问属性,因为列表框已绑定并且具有 itemsource

我知道这不是最佳做法..但我没有简单的选择..谢谢!

标签: wpfxamllistboxdatatemplate

解决方案


如果您需要特定于视图的内容,请添加 Loaded 事件处理程序:

<CheckBox x:Name="chk0" Content="xxx" Loaded="CheckBoxLoaded" ...>

然后在代码隐藏中从发件人参数获取 CheckBox 并更改属性:

private void CheckBoxLoaded(object sender, RoutedEventArgs e)
{
    var chk = sender as CheckBox;
}

但是您可以在项目类中声明特殊属性并简单地绑定 CheckBox:

<CheckBox x:Name="chk0" Content="{Binding PropertyX}" ...>

相同的方法应该适用于 TextBlock。


推荐阅读