gpt4 book ai didi

c# - DataGrid 和 DataTemplate 的数据绑定(bind)问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:13 25 4
gpt4 key购买 nike

我想这是一个简单的数据绑定(bind)问题,但我无法让它工作。我有一个 DataGrid、一个带有 Observable 集合的 ViewModel 和一个表示该集合中对象的类。 DataGrid 有两列:DataGridTextColumn 和DataGridTemplateColumn。数据与 DataGridTextColumn 的绑定(bind)有效,但与 DataGridTemplateColumn 的绑定(bind)无效。相应的列只是保持为空。

代码如下:

这是我的数据网格:

<DataGrid x:Name="tdg_Memory" Grid.Column="1" Margin="0" Grid.Row="4" VerticalScrollBarVisibility="Visible" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="MemoryIndexColumn" Header="Index"/>
<DataGridTemplateColumn x:Name="MemorySolutionColumn" CellTemplate="{DynamicResource MemorySolutionCellTemplate}" Header="Solution"/>
<DataGrid.Columns>
<DataGrid>

这是数据模板:

<DataTemplate x:Key="MemorySolutionCellTemplate">
<Grid x:Name="grd_RootGrid" Height="Auto" Width="Auto" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label x:Name="lbl_ValueCaption" Content="Value:" Margin="0" Grid.Row="0" Height="Auto" VerticalAlignment="Top" HorizontalAlignment="Right"/>
<Label x:Name="lbl_FitnessCaption" Content="Fitness:" Margin="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Top"/>
<Label x:Name="lbl_ValueValue" Content="65665" Grid.Column="1" Height="Auto" Margin="12,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<Label x:Name="lbl_FitnessValue" Content="121212" Grid.Column="1" Margin="12,0,0,0" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</DataTemplate>

数据绑定(bind)发生在代码后面:

// setting the itemsSource (seems to work)
jobItem.tdg_Memory.ItemsSource = jobModel.Memory;

// binding of the first column (DataGridTextColumn) seems to work
Binding memoryIndexColumnBinding = new Binding();
memoryIndexColumnBinding.Path = new PropertyPath("Index");
jobItem.MemoryIndexColumn.Binding = memoryIndexColumnBinding;

这是 ViewModel:

// the observable collection that holds the data for the DataGrid
private ThreadSafeObservableCollection<MemoryItemRepresentative> _memory;

public ThreadSafeObservableCollection<MemoryItemRepresentative> Memory {
get { return _memory; }
set {
_memory = value;

FirePropertyChanged("Memory");
}
}

以下是集合中包含的对象:

public class MemoryItemRepresentative : ViewModelBase {

private int _index;

public int Index {
get { return _index; }
set {
_index = value;

FirePropertyChanged("Index");
}
}

private MPBILSolution _solution;

public MPBILSolution Solution {
get { return _solution; }
set {
_solution = value;

FirePropertyChanged("Solution");
}
}

public MPBILPropabilityVector PropabilityVector;

public MemoryItemRepresentative () {

}
}

MBILSolution 是(但这应该与该问题无关):

public class MPBILSolution : ISolution {

public int Position { get; set; }
public BinaryNumber Value { get; set; }
public double Fitness { get; set; }

}

我现在想做的是将 DataGrid 的第一列(DataGridTextColumn)绑定(bind)到 MemoryItemRepresentative 类的 Index 属性,这样效果很好。

此外,我想显示 MPBILSolution 对象的内容(由属性 Position、Value 和 Fitness 组成)绑定(bind)到第二列(DataGridTemplateColumn)。出于这个原因,我构建了 DataTemplate,其中包含一个 Value 属性标签和一个 Fitness 属性标签。

我没有发布不起作用的实际绑定(bind)代码,因为我的问题似乎是 DataGrid 的相应列始终为空。至少 DataTemplate 中的静态标签(用于字幕)应该是可见的?

所以我非常感谢任何帮助。根据要求提供任何进一步的代码......

附录:

好吧,现在实际的绑定(bind)似乎出了问题:在 DataGrid 中,我现在可以在列中看到 DataTemplate,但缺少 MPBILSolution 对象的值:

下面是我如何将此对象绑定(bind)到 DataTemplate:

DataTemplate memorySolutionCellTemplate = (DataTemplate)jobItem.FindResource("MemorySolutionCellTemplate");

DependencyObject o = memorySolutionCellTemplate.LoadContent();

Label l = (Label)VisualTreeAssistant.FindFrameworkElement(o, "lbl_FitnessValue");


Binding fitnessValueBinding = new Binding();
fitnessValueBinding.Path = new PropertyPath("Fitness");
fitnessValueBinding.Mode = BindingMode.OneWay;
l.SetBinding(Label.ContentProperty, fitnessValueBinding);

对象 l 似乎得到了正确的 Label 对象所以问题似乎出在这个绑定(bind) block 的最后四行?

请再次帮助:)

最佳答案

为什么是 DynamicResource?如果你可以使用 StaticResource 这样做,DynamicResource 可以对我认为的错误保持安静(可能检查输出窗口)...

关于c# - DataGrid 和 DataTemplate 的数据绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com