我有一个我希望绑定到WPF网格的集合.
我面临的问题是列数是动态的,并且依赖于集合.这是一个简单的模拟:
public interface IRows
{
string Message{get;}
IColumns[] Columns{get;}
}
public interface IColumns
{
string Header {get;}
AcknowledgementState AcknowledgementState{get;}
}
public interface IViewModel
{
ObservableCollection<IRows> Rows {get;}
}
Run Code Online (Sandbox Code Playgroud)
我希望我的视图绑定到Rows集合,该集合包含一组Columns.
My Columns集合包含一个应由图像表示的枚举(3种可能性中的1种).它还包含一个Message属性,该属性只能显示在一列中(静态且只是一些文本信息).它还包含一个Header字符串,该字符串应显示为该列的标题.

请注意,列数是可变的(在标题设置为Acknowledge的时刻,但这将更改为表示动态数据).
更新:这是在实施Rachel的建议之后
<ItemsControl
ItemsSource="{Binding Items, Converter={StaticResource PresentationConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid ShowGridLines="true"
local:GridHelpers.RowCount="{Binding RowCount}"
local:GridHelpers.ColumnCount="{Binding ColumnCount}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding RowIndex}"/>
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type UI:MessageEntity}">
<TextBox Text="{Binding Message}"></TextBox>
</DataTemplate>
<DataTemplate DataType="{x:Type UI:StateEntity}">
<TextBox Text="{Binding State}"></TextBox> …Run Code Online (Sandbox Code Playgroud) 我想知道能够在3D中缩放到屏幕空间选择框/窗口的最佳算法.
我现在有点工作,但是当目标的距离很大时,似乎没有正确放大.
目前,它通过计算相对于视口宽度/高度的选择框的比例来工作,并将该比例应用于相机到其目标的距离/范围.