Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# WPF:将DataGridTemplateColumn中的元素绑定到另一DataGridTemplateColumn中的元素_C#_Wpf_Xaml_Binding_Datagrid - Fatal编程技术网

C# WPF:将DataGridTemplateColumn中的元素绑定到另一DataGridTemplateColumn中的元素

C# WPF:将DataGridTemplateColumn中的元素绑定到另一DataGridTemplateColumn中的元素,c#,wpf,xaml,binding,datagrid,C#,Wpf,Xaml,Binding,Datagrid,:)我有一个数据网格。在第2列中有“ComboBox1”,在第3列中有“ComboBox2”。我想在“ComboBox2”上将IsEnabled设置为false,只要“ComboBox1”选择了dex=0。每一行都要分开 这在Datagrid之外非常有效,有两个组合框(借助Style和DataTrigger)。但是,在Datagrid的第3列中,我无法“看到”ComboBox1(“无法找到绑定的源…”) 这基本上是一个名称问题。然而,在DataGrid中按名称引用组合框首先似乎是错误的。那么:有

:)我有一个数据网格。在第2列中有“ComboBox1”,在第3列中有“ComboBox2”。我想在“ComboBox2”上将IsEnabled设置为false,只要“ComboBox1”选择了dex=0。每一行都要分开

这在Datagrid之外非常有效,有两个组合框(借助Style和DataTrigger)。但是,在Datagrid的第3列中,我无法“看到”ComboBox1(“无法找到绑定的源…”)

这基本上是一个名称问题。然而,在DataGrid中按名称引用组合框首先似乎是错误的。那么:有什么办法可以做到这一点吗

提前非常感谢

<Window.Resources>
    <CollectionViewSource x:Key="Source1" Source="{Binding List1}" />
    <CollectionViewSource x:Key="Source2" Source="{Binding List2}" />
</Window.Resources>

<DataGrid x:Name="ModelControl" AutoGenerateColumns="False" ItemsSource="{Binding List3}">
    <DataGrid.Columns>
         <DataGridTextColumn Binding="{Binding MyName}" Header="Modellname" />
        <DataGridTemplateColumn Header="Header 1">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox1" DisplayMemberPath="MyName" SelectedIndex="0">
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source2}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Header 2">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox2" DisplayMemberPath="MyName">
                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}">
                                <Setter Property="IsEnabled" Value="True" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding SelectedIndex,ElementName=ComboBox1}" Value="0">
                                        <Setter Property="IsEnabled" Value="False" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ComboBox.Style>
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source1}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>


请不要介意复合收集。

尝试以下方式:

通过添加所选id
SelectedValue=“{Binding list3combox1itemid}”
来修改Combox1,
list3combox1itemid
属性必须是list3的属性

<ComboBox x:Name="ComboBox1" DisplayMemberPath="MyName" SelectedValue="{Binding List3ComboBox1ItemId}">
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource Source2}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

如果id>0返回true,您的combobox2必须包含一个转换器来验证您的id。(不包括在本答案中)


然而,在DataGrid中按名称引用组合框首先似乎是错误的。那么:有什么办法可以做到这一点吗

您应该将
SelectedIndex
属性绑定到模型类的源属性:

<DataGrid x:Name="ModelControl" AutoGenerateColumns="False" ItemsSource="{Binding List3}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding MyName}" Header="Modellname" />
        <DataGridTemplateColumn Header="Header 1">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox1" DisplayMemberPath="MyName" 
                                      SelectedIndex="{Binding YourIndexProperty}">
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source2}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Header 2">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox2" DisplayMemberPath="MyName">
                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}">
                                <Setter Property="IsEnabled" Value="True" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding YourIndexProperty}" Value="0">
                                        <Setter Property="IsEnabled" Value="False" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ComboBox.Style>
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source1}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>


确保模型类型实现了
INotifyPropertyChanged
接口,并在setter中引发
PropertyChanged
事件:

谢谢!模型类是两个组合框的共同点-完美!我试图通过DependencyProperty(而不是INotifyPropertyChanged)来实现这一点。由于某种原因,它不起作用,直到我通过ComboBox的DropDownClosed属性另外引发了一个事件,该属性设置了models DependencyProperty。现在工作完美了!:-)
<DataGrid x:Name="ModelControl" AutoGenerateColumns="False" ItemsSource="{Binding List3}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding MyName}" Header="Modellname" />
        <DataGridTemplateColumn Header="Header 1">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox1" DisplayMemberPath="MyName" 
                                      SelectedIndex="{Binding YourIndexProperty}">
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source2}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Header 2">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="ComboBox2" DisplayMemberPath="MyName">
                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}">
                                <Setter Property="IsEnabled" Value="True" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding YourIndexProperty}" Value="0">
                                        <Setter Property="IsEnabled" Value="False" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ComboBox.Style>
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <CollectionContainer Collection="{Binding Source={StaticResource Source1}}" />
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>