C# 使用模板listbox项将可观察列表绑定到listbox

C# 使用模板listbox项将可观察列表绑定到listbox,c#,wpf,xaml,C#,Wpf,Xaml,我有以下模板 <ControlTemplate x:Key="tmpl_btn_TecnicianModeMenu" TargetType="{x:Type ListBoxItem}"> <Grid Opacity="1" d:LayoutOverrides="Width, Height"> <Border x:Name="Border" CornerRadius="0" BorderThickness

我有以下模板

<ControlTemplate x:Key="tmpl_btn_TecnicianModeMenu" TargetType="{x:Type ListBoxItem}">
<Grid Opacity="1" d:LayoutOverrides="Width, Height">
    <Border 
        x:Name="Border"  
        CornerRadius="0" 
        BorderThickness="0" Height="Auto" Margin="0" Background="White">

        <StackPanel Name="stackPanel" Height="Auto" Margin="0" Orientation="Horizontal" >
            <Button x:Name="button" Style="{DynamicResource ButtonListBoxItem}" Margin="5,5,5,5" Width="120" Height="Auto" BorderThickness="0" >
                <TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="בצע"  Margin="12,0" VerticalAlignment="Center" HorizontalAlignment="Stretch" Style="{DynamicResource tb_Desc}"/>
            </Button>
            <StackPanel Height="Auto" Margin="0" Orientation="Horizontal" >
                <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_Result"  Text="LB_Result" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height" />
                <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_OK"  Text="LB_OK" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height" />
                <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_TchName"  Text="LB_TchName" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5"/>
                <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_Date"  Text="LB_Date" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height"/>
                <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_CheckName"  Text="{TemplateBinding Tag}"   Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5"/>
            </StackPanel>
        </StackPanel>
    </Border>
    <Border x:Name="Divide" BorderBrush="Gray" BorderThickness="0,0.5" Height="140" Width="Auto" Margin="18.5,0" VerticalAlignment="Bottom"/>
</Grid>
<ControlTemplate.Triggers>
    <Trigger Property="IsKeyboardFocused" Value="True"/>

    <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
    </Trigger>
</ControlTemplate.Triggers>
我不知道如何解决这个问题

我想应该有一个转换器的使用?请给我指路


我假设可观察列表是结构化的。但是如何将它们转换为Templates格式的项呢?

在一个模板中,您通常会使用该数据对象。例如,如果下面的数据类具有
Result
属性

public class MyData
{
    public string Result { get; set; }
    ...
}
您可以这样绑定:

<TextBlock Text="{Binding Path=Result}" ... />
其中,
myDataObjects
是一个
observedcollection


如果您需要在ObservableCollection中已经包含的数据对象发生更改时更新UI,则需要实现class
MyData

不太清楚您的意思。它将是一个具有公共属性的类,如答案所示。不,这不是必需的。只有在将数据对象添加到集合后属性可以更改时,数据类才能实现并触发
PropertyChanged
事件。
<TextBlock Text="{Binding Path=Result}" ... />
myDataObjects.Add(
    new MyData
    {
        Result = "A Result"
        ...
    });