C# 如何将ItemsSource分配给ItemTemplate中的ComboBox?

C# 如何将ItemsSource分配给ItemTemplate中的ComboBox?,c#,wpf,combobox,listbox,datatemplate,C#,Wpf,Combobox,Listbox,Datatemplate,以下是我当前的代码,简化为相关代码: <telerik:RadListBox Grid.Row="0" Grid.Column="2" Margin="0, 5, 5, 5" x:Name="listBoxIssue" HorizontalAlignment="Left" VerticalAlignment="Top" Height="690" Width="793" ItemTemplate="{StaticReso

以下是我当前的代码,简化为相关代码:

<telerik:RadListBox Grid.Row="0" Grid.Column="2" Margin="0, 5, 5, 5"
            x:Name="listBoxIssue" HorizontalAlignment="Left" VerticalAlignment="Top"
            Height="690" Width="793"
            ItemTemplate="{StaticResource lbIssueTemplate}" ItemsSource="{Binding}">
我希望在这个场景中也能实现上面的代码。这里的困难在于我无法获取列的名称,也无法使用.Columns,因为它们是DataTemplate

注意:我没有使用MVVM。

试试这个

xaml

Equipm class I仅使用了PrintCode属性

视图模型

公共类视图模型
{
公共视图模型()
{
选项=新的可观察集合{“全部”、“左”、“右”、“无”};
设备=新的可观察集合(){new equipm(),new equipm()};
}
公共可观测采集设备{get;set;}
公共ObservableCollection选项{get;set;}
}

查看是否存在任何绑定错误?还要确保RadListBox的ItemsSource是集合的集合。@pushpraj没有错误。与其说绑定有问题,不如说我不知道如何访问要绑定的相关控件。其他一切都很好-我在RadListBox中有复选框、文本框等。只是ComboBox更复杂,因为它需要两个不同的绑定—SelectedValuePath和ItemsSource。再次重申,我在GridView中完成了这一点,但在这里没有,因为我在访问所需的控件时遇到了困难。为了帮助理解,我将给出一个例子:“equipment”是绑定到ListBox的对象,其属性是Name(ABC)、Serial(123)、Quantity(5)和PrintCode(All)。这些很容易装订。但是对于PrintCode,我希望组合框被绑定以提供选项,这些选项是“None”、“Left”、“Right”和“All”。绑定后,所选值将自动为“全部”(根据上述装备对象)。在下拉组合框时,它应该有“无”、“左”ETC。要做到这一点,它需要绑定到另一个对象(PrintCode),而不是列表框的对象(Equip)。好了,现在我知道了问题所在,我更新了答案。谢谢你的帮助!就我所知,我不能像前面提到的那样实现MVVM。我只能在第二天进行实验,因为现在已经下班了,但现在我觉得如果不实现MVVM,就会缺少一些东西。这就是为什么如果代码在某一行中,比如>GridViewComboBoxColumn)gridPrintOption.Columns[“PrintCode”]).ItemsSource=listPrintCode,我会感到最舒服的原因。如果组合框位于GridView中,这种情况非常简单。
<DataTemplate x:Key="lbIssueTemplate">
        <Grid Margin="0" Width="Auto">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>             
            <ComboBox x:Name="PrintCode" Grid.Row="0" Grid.Column="2" ItemsSource="{Binding}"
                      SelectedValuePath="PrintCode" DisplayMemberPath="PrintCode" />
        </Grid>
    </DataTemplate>
((GridViewComboBoxColumn)gridPrintOption.Columns["PrintCode"]).ItemsSource = listPrintCode;
    <Window.Resources>
    <DataTemplate x:Key="lbIssueTemplate">
        <Grid Margin="0" Width="Auto">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <ComboBox x:Name="PrintCode" Grid.Row="0" Grid.Column="2"
                      SelectedValue="{Binding DataContext.PrintCode, RelativeSource={RelativeSource Mode=Self}, Mode=TwoWay}" 
                      ItemsSource="{Binding DataContext.Choices, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
        </Grid>
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ListBox Background="Red" ItemTemplate="{StaticResource lbIssueTemplate}" ItemsSource="{Binding Equips}"></ListBox>
</StackPanel>
    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}
    public class Equip:INotifyPropertyChanged
{
   public Equip()
    {
        PrintCode = "All";
    }

    private string printcode;
    public string PrintCode
    {
        get { return printcode; }
        set { printcode = value; OnPropertychanged("PrintCode"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    void OnPropertychanged(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }
}
    public class ViewModel
{
    public ViewModel()
    {
        Choices = new ObservableCollection<string> { "All", "Left", "Right", "None" };
        Equips = new ObservableCollection<Equip>() { new Equip(), new Equip() };
    }

    public ObservableCollection<Equip> Equips { get; set; }

    public ObservableCollection<string> Choices { get; set; }
}