列表框在运行时从代码隐藏修改项目的数据模板
List box modify datatemplate of items at runtime from code behind
我有这个列表框
<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
我知道这不是最佳做法..但我没有简单的选择..
谢谢!
如果您需要特定于视图的内容,请添加 Loaded 事件处理程序:
<CheckBox x:Name="chk0" Content="xxx" Loaded="CheckBoxLoaded" ...>
然后在代码隐藏中从 sender 参数获取 CheckBox 并更改属性:
private void CheckBoxLoaded(object sender, RoutedEventArgs e)
{
var chk = sender as CheckBox;
}
但是您可以在项目 class 中声明特殊的 属性 并简单绑定 CheckBox:
<CheckBox x:Name="chk0" Content="{Binding PropertyX}" ...>
相同的方法应该适用于 TextBlock。
我有这个列表框
<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
我知道这不是最佳做法..但我没有简单的选择.. 谢谢!
如果您需要特定于视图的内容,请添加 Loaded 事件处理程序:
<CheckBox x:Name="chk0" Content="xxx" Loaded="CheckBoxLoaded" ...>
然后在代码隐藏中从 sender 参数获取 CheckBox 并更改属性:
private void CheckBoxLoaded(object sender, RoutedEventArgs e)
{
var chk = sender as CheckBox;
}
但是您可以在项目 class 中声明特殊的 属性 并简单绑定 CheckBox:
<CheckBox x:Name="chk0" Content="{Binding PropertyX}" ...>
相同的方法应该适用于 TextBlock。