如何绑定在 DataGrid 中嵌套的 ComboBox
How to bind ComboBox found inside of a nested in DataGrid
我正在尝试同时学习 WPF 和 MVVM,需要一些绑定方面的帮助。我仍在努力思考将控件绑定到 class 的属性。
这是我的故障视图模型:
public class Malfunctions : ViewModelBase {
public ObservableCollection<Model.PartMalfunction> AllPartMalfunctions {
get;
private set;
}
public ObservableCollection<Model.Part> AllParts {
get;
private set;
}
}
这是 Model.PartMalfunction.cs:
public class PartMalfunction{
public ObservableCollection<Model.PartSerial> AllPartSerials {
get;
set;
}
}
这里是 Model.Part.cs:
public class Part {
public string Label { get; set; }
public string Value { get; set; }
}
我有一个绑定到故障视图模型中的 AllPartMalfunctions ObservableCollection 的 DataGrid。这个绑定工作得很好。
我在 RowDetailsTemplate 中嵌套了另一个 DataGrid,它绑定到 PartMalfunction 模型中的 AllPartSerials。此绑定也工作正常。
我的问题是嵌套 DataGrid 中的组合框。我想将此组合框绑定到故障视图模型中的 AllParts ObservableCollection。我该怎么做?
<DataGrid ItemsSource="{Binding AllPartMalfunctions}" AutoGenerateColumns="False" Width="Auto"
RowDetailsVisibilityMode="Visible">
<DataGrid.Columns>
<!--removed for brevity-->
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding AllPartSerials }" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="cboPart" VerticalAlignment="Center" ItemsSource="{Binding AllParts}" DisplayMemberPath="Label" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
类似的方法一直停留在我的案例中。我实现了一个具有不同视图模型结构的。
public class PartMalfunction{
public ObservableCollection<Model.PartSerial> AllPartSerials {
get;
set;
}
public ObservableCollection<Model.Part> AllParts {
get { return SomeStaticClass.AllParts; }
}
}
即使在 DataTemplate 中,绑定也自然有效。希望这适合您的领域。
为绑定到 Malfunctions 的元素命名并使用相对路径进行绑定,如下面包含 ComboBox 的行所示。对于我的示例,我假设 StackPanel 包含 DataGrid,并且 StackPanel 绑定到容器视图模型的故障 属性。
<StackPanel x:Name="MalfunctionsGrid" DataContext={Binding Malfunctions}" Orientation="Vertical">
...
<DataGrid ItemsSource="{Binding AllPartMalfunctions}" AutoGenerateColumns="False" Width="Auto"
RowDetailsVisibilityMode="Visible">
...
...
<ComboBox Name="cboPart" VerticalAlignment="Center" ItemsSource="{Binding Path=DataContext.AllParts, ElementName=MalfunctionsGrid}" DisplayMemberPath="Label" />
...
...
我正在尝试同时学习 WPF 和 MVVM,需要一些绑定方面的帮助。我仍在努力思考将控件绑定到 class 的属性。
这是我的故障视图模型:
public class Malfunctions : ViewModelBase {
public ObservableCollection<Model.PartMalfunction> AllPartMalfunctions {
get;
private set;
}
public ObservableCollection<Model.Part> AllParts {
get;
private set;
}
}
这是 Model.PartMalfunction.cs:
public class PartMalfunction{
public ObservableCollection<Model.PartSerial> AllPartSerials {
get;
set;
}
}
这里是 Model.Part.cs:
public class Part {
public string Label { get; set; }
public string Value { get; set; }
}
我有一个绑定到故障视图模型中的 AllPartMalfunctions ObservableCollection 的 DataGrid。这个绑定工作得很好。
我在 RowDetailsTemplate 中嵌套了另一个 DataGrid,它绑定到 PartMalfunction 模型中的 AllPartSerials。此绑定也工作正常。
我的问题是嵌套 DataGrid 中的组合框。我想将此组合框绑定到故障视图模型中的 AllParts ObservableCollection。我该怎么做?
<DataGrid ItemsSource="{Binding AllPartMalfunctions}" AutoGenerateColumns="False" Width="Auto"
RowDetailsVisibilityMode="Visible">
<DataGrid.Columns>
<!--removed for brevity-->
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding AllPartSerials }" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="cboPart" VerticalAlignment="Center" ItemsSource="{Binding AllParts}" DisplayMemberPath="Label" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
类似的方法一直停留在我的案例中。我实现了一个具有不同视图模型结构的。
public class PartMalfunction{
public ObservableCollection<Model.PartSerial> AllPartSerials {
get;
set;
}
public ObservableCollection<Model.Part> AllParts {
get { return SomeStaticClass.AllParts; }
}
}
即使在 DataTemplate 中,绑定也自然有效。希望这适合您的领域。
为绑定到 Malfunctions 的元素命名并使用相对路径进行绑定,如下面包含 ComboBox 的行所示。对于我的示例,我假设 StackPanel 包含 DataGrid,并且 StackPanel 绑定到容器视图模型的故障 属性。
<StackPanel x:Name="MalfunctionsGrid" DataContext={Binding Malfunctions}" Orientation="Vertical">
...
<DataGrid ItemsSource="{Binding AllPartMalfunctions}" AutoGenerateColumns="False" Width="Auto"
RowDetailsVisibilityMode="Visible">
...
...
<ComboBox Name="cboPart" VerticalAlignment="Center" ItemsSource="{Binding Path=DataContext.AllParts, ElementName=MalfunctionsGrid}" DisplayMemberPath="Label" />
...
...