解决 如何使用itemTemplate水平绑定对象?

毁灭

活跃成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
我有一个可观察到的类类型,如下所示:

VIew model:
public ObservableCollection<selectedLevel> selectedLevels { get; set; }
selectedLevels = new ObservableCollection<selectedLevel>();
public class selectedLevel
{
   public string Level
    {
        get;
        set;
    }

   public string PlanetSelected
    {
        get; set;

    }

}

我将用ItemTemplate绑定的“水平”和“行星”绑定如下:

Xaml:
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Grid>
           <Grid.ColumnDefinitions>
                   <ColumnDefinition SharedSizeGroup="Col1" />
                   <ColumnDefinition SharedSizeGroup="Col2" />
                   <ColumnDefinition SharedSizeGroup="Col3" />
                   <ColumnDefinition SharedSizeGroup="Col4" />
                   <ColumnDefinition SharedSizeGroup="Col5" />
                   <ColumnDefinition SharedSizeGroup="Col6" />
                   <ColumnDefinition SharedSizeGroup="Col7" />
                   <ColumnDefinition SharedSizeGroup="Col8" />
                   <ColumnDefinition SharedSizeGroup="Col9" />
                   <ColumnDefinition SharedSizeGroup="Col10"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                   <RowDefinition SharedSizeGroup="Row1"/>
                   <RowDefinition SharedSizeGroup="Row2"/>
            </Grid.RowDefinitions>
           <Label Grid.Column="0"   Content="{Binding Level}"/>
           <Label Grid.Column="1"   Content="{Binding PlanetSelected}"/>

       </Grid>
    </DataTemplate>
   </ItemsControl.ItemTemplate>

每个对象都出现在新行中,但我希望它们出现在新列中,但只保留两行。

我尝试为两个标签设置Grid.Row = 0和Grid.Row = 1,但它们仍出现在新行中。

如何在列而不是行中表示对象属性?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
我尝试为两个标签设置Grid.Row = 0和Grid.Row = 1,但它们仍出现在新行中。

如何在列而不是行中表示对象属性?
你已经是...

Your current code should put <Label Grid.Column="0" Content="{Binding Level}"/> on line/column 0 in the first cell.
Your current code should put <Label Grid.Column="1" Content="{Binding PlanetSelected}"/> on line/column 0 in the second cell.

调用列从左到右。行从上到下。
如果您在两个标签上都执行了上面的操作,则两个标签都将位于不同行的第一列中。

如果不这样做,则可能是其他原因导致代码混乱,从而破坏了模板顺序。为什么不为标签创建绑定属性以将其设置为基于绑定属性显示呢?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
您也仅绑定内容属性,而不绑定标签网格位置属性。
 

毁灭

活跃成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
是的,它将所有对象都绑定到了第一列中。.但是我认为问题并没有解决。.我希望它们在不同的列中..单个对象的单个列..我通过将面板方向更改为水平来做到这一点。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
但我认为问题并没有解决
这个问题确实解决了。 ;) 我完全知道你的意思。你不明白我给你的答案。

If you are setting the column grid on the control <Label Grid.Column="0" - quite simply that control will only sit in one location. And any new object/controls added after it will sit right on top of them too. Also recall my suggestion to bind your labels to which grid column/row they should belong to.

我还希望您阅读此书,因为它具有其他控件,这些控件可以使您在执行操作时更加轻松,而无需所有这些ColumnDefinitions,因此请参阅 面板概述-WPF .NET Framework 在堆栈面板/包装面板/特别是坞面板上阅读。对于您的设计,我的想法是只有一列,其中一个面板,并在面板中设置方向,这样,当将新控件嵌套到面板中并与网格定义相对应时,将使您的工作更加轻松。这样做还完全不需要绑定控件位置,因为面板将处理这些位置。
 
最佳 底部