Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将TabControl与TabItems集合绑定_C#_Wpf_Mvvm_Binding_Tabcontrol - Fatal编程技术网

C# 如何将TabControl与TabItems集合绑定

C# 如何将TabControl与TabItems集合绑定,c#,wpf,mvvm,binding,tabcontrol,C#,Wpf,Mvvm,Binding,Tabcontrol,我有一个TabControl,它有几个TabItems。在每个选项卡项中,都有许多按钮。tabItem代表一个房间,房间里有几张桌子(按钮) 我绑定了一个TabItem,但我不知道如何在TabControl中绑定TabItems列表 主窗口: <TabControl Grid.Row="0" Name="tabTables" Margin="-1 -5 -1 -1" Background="AliceBlue" BorderBrush="White"> <TabI

我有一个TabControl,它有几个TabItems。在每个选项卡项中,都有许多按钮。tabItem代表一个房间,房间里有几张桌子(按钮)

我绑定了一个TabItem,但我不知道如何在TabControl中绑定TabItems列表

主窗口:

 <TabControl Grid.Row="0" Name="tabTables" Margin="-1 -5 -1 -1"  Background="AliceBlue"  BorderBrush="White">
    <TabItem Visibility="Collapsed">
        <ItemsControl ItemsSource="{Binding TableCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas x:Name="canvas1"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type vm:TableViewModel}">
                    <Button Uid="{Binding TableName}" ContentStringFormat="{Binding TableGuestCount}"  Style="{StaticResource ResourceKey=BtnTableEmpty}" Width="84" Height="90"  />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemContainerStyle>
                <Style TargetType="ContentPresenter">
                    <Setter Property="Canvas.Left" Value="{Binding Path=TablePosX}" />
                    <Setter Property="Canvas.Top" Value="{Binding Path=TablePosY}" />
                    <Setter Property="Tag" Value="{Binding Path=TableID}"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
        </ItemsControl>
    </TabItem>
</TabControl>
TableViewModel:

public class TableAreaViewModel:BaseViewModel
{
    public TableAreaViewModel()
    {
        TableCollection = new ObservableCollection<TableViewModel>();
    }
    public AreaViewModel Area { get; set; }
    public ObservableCollection<TableViewModel> TableCollection { get; set; 
    }

}
public class AreaViewModel: BaseViewModel
{
    TableGrp _tbGrp = null;

    public AreaViewModel(TableGrp tbGrp)
    {
        _tbGrp = tbGrp;
    }
    public string GrpID { get { return _tbGrp.GrpID; } }
    public string GrpName { get { return _tbGrp.GrpName; } }
    }
}
public class TableViewModel : BaseViewModel
{
    private Table _table = null;
    public TableViewModel(Table tb)
    {
        _table = tb;
    }

    public string TableID
    {
        get { return _table.TableID; }
        set { _table.TableID = value; }
    }

    public string TableName
    {
        get { return _table.Name; }
        set { _table.Name = value; }
    }

    public string TableGuestCount
    {
        get
        {
            int customerCnt = _table.CustCount ?? 0;
            return string.Format("{0}/{1}", customerCnt, _table.MaxCount);
        }

    }

    public double TablePosX
    {
        get { return _table.ShowXValue ?? 10; }
        set { _table.ShowXValue = value; }
    }

    public double TablePosY
    {
        get { return _table.ShowYValue ?? 10; }
        set { _table.ShowYValue = value; }
    }

}
public class TableAreaListViewModel
{
    public TableAreaListViewModel()
    {
        TableAreaCollection = new ObservableCollection<TableAreaViewModel>();
        LoadTables();
    }
    public ObservableCollection<TableAreaViewModel> TableAreaCollection { get; set; }

    private void LoadTables()
    {
        TableManager mgr = new TableManager();
        var list = mgr.LoadTableAreas();

        foreach (var tb in list)
        {
            TableAreaViewModel ta = new TableAreaViewModel();
            ta.Area = new AreaViewModel(tb.TableGroup);
            foreach(var item in tb.Tables )
            {
                ta.TableCollection.Add(new TableViewModel(item));
            }
            TableAreaCollection.Add(ta);
        }

    }

}
TableAreaListViewModel:

public class TableAreaViewModel:BaseViewModel
{
    public TableAreaViewModel()
    {
        TableCollection = new ObservableCollection<TableViewModel>();
    }
    public AreaViewModel Area { get; set; }
    public ObservableCollection<TableViewModel> TableCollection { get; set; 
    }

}
public class AreaViewModel: BaseViewModel
{
    TableGrp _tbGrp = null;

    public AreaViewModel(TableGrp tbGrp)
    {
        _tbGrp = tbGrp;
    }
    public string GrpID { get { return _tbGrp.GrpID; } }
    public string GrpName { get { return _tbGrp.GrpName; } }
    }
}
public class TableViewModel : BaseViewModel
{
    private Table _table = null;
    public TableViewModel(Table tb)
    {
        _table = tb;
    }

    public string TableID
    {
        get { return _table.TableID; }
        set { _table.TableID = value; }
    }

    public string TableName
    {
        get { return _table.Name; }
        set { _table.Name = value; }
    }

    public string TableGuestCount
    {
        get
        {
            int customerCnt = _table.CustCount ?? 0;
            return string.Format("{0}/{1}", customerCnt, _table.MaxCount);
        }

    }

    public double TablePosX
    {
        get { return _table.ShowXValue ?? 10; }
        set { _table.ShowXValue = value; }
    }

    public double TablePosY
    {
        get { return _table.ShowYValue ?? 10; }
        set { _table.ShowYValue = value; }
    }

}
public class TableAreaListViewModel
{
    public TableAreaListViewModel()
    {
        TableAreaCollection = new ObservableCollection<TableAreaViewModel>();
        LoadTables();
    }
    public ObservableCollection<TableAreaViewModel> TableAreaCollection { get; set; }

    private void LoadTables()
    {
        TableManager mgr = new TableManager();
        var list = mgr.LoadTableAreas();

        foreach (var tb in list)
        {
            TableAreaViewModel ta = new TableAreaViewModel();
            ta.Area = new AreaViewModel(tb.TableGroup);
            foreach(var item in tb.Tables )
            {
                ta.TableCollection.Add(new TableViewModel(item));
            }
            TableAreaCollection.Add(ta);
        }

    }

}
公共类TableAreaListViewModel
{
公共表区域列表视图模型()
{
TableAreaCollection=新的ObservableCollection();
加载表();
}
公共ObservableCollection TableAreaCollection{get;set;}
私有void加载表()
{
TableManager mgr=新的TableManager();
var list=mgr.LoadTableAreas();
foreach(列表中的变量tb)
{
TableAreaViewModel ta=新的TableAreaViewModel();
ta.Area=新的AreaViewModel(tb.TableGroup);
foreach(tb.表中的变量项)
{
ta.TableCollection.Add(新建TableViewModel(项));
}
TableAreaCollection.Add(ta);
}
}
}

您可能希望将TabControl的ItemSource绑定到集合以生成选项卡。大概是这样的:

    <TabControl ItemsSource="{Binding TableAreaCollection}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding TableCollection}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas x:Name="canvas1"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate DataType="{x:Type vm:TableViewModel}">
                            <Button Uid="{Binding TableName}" ContentStringFormat="{Binding TableGuestCount}"  Style="{StaticResource ResourceKey=BtnTableEmpty}" Width="84" Height="90"  />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                    <ItemsControl.ItemContainerStyle>
                        <Style TargetType="ContentPresenter">
                            <Setter Property="Canvas.Left" Value="{Binding Path=TablePosX}" />
                            <Setter Property="Canvas.Top" Value="{Binding Path=TablePosY}" />
                            <Setter Property="Tag" Value="{Binding Path=TableID}"/>
                        </Style>
                    </ItemsControl.ItemContainerStyle>
                </ItemsControl>
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>


可能与重复,但TabItem的内容仍需要绑定一组按钮,即ContentTemplate。您能帮我编写一点代码吗?我无法加载tabitemsHow的内容。您想显示多少选项卡?这些选项卡来自何处?谢谢您的代码!但我发现了一个问题,通过窗口搜索,我只能得到一张画布。您有什么问题吗?我只能从第一个选项卡获取控件。您的TableArea集合中是否有多个项?