Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 将Datagrid与可观测集合wpf绑定_C#_Wpf_Xaml_Binding_Datagrid - Fatal编程技术网

C# 将Datagrid与可观测集合wpf绑定

C# 将Datagrid与可观测集合wpf绑定,c#,wpf,xaml,binding,datagrid,C#,Wpf,Xaml,Binding,Datagrid,我有一个具有多列的Datagrid,它有itemsource={Binding},在代码隐藏中,我将DataContext设置为ObservableCollection 我的customClass具有标题、类型、语言、type1(customClass)、type2(customClass)等属性 现在我的问题是,在一个列类型中,我有文本值,比如“A”或“B”,如果值是A,那么customClass的对象将有一个type1的对象,type2设置为null,如果type有值“B”,那么type1设

我有一个具有多列的Datagrid,它有itemsource={Binding},在代码隐藏中,我将DataContext设置为ObservableCollection

我的customClass具有标题、类型、语言、type1(customClass)、type2(customClass)等属性

现在我的问题是,在一个列类型中,我有文本值,比如“A”或“B”,如果值是A,那么customClass的对象将有一个type1的对象,type2设置为null,如果type有值“B”,那么type1设置为null,type2有值

现在在语言中,我想用这样一种方式绑定,如果类型有a,那么取值为type1.someProperty,如果它有B,那么取值为type2.someProperty

这是我的xaml中的内容

<DataGrid x:Name="dg_Content" Margin="0,60,-0.4,0" VerticalAlignment="Top" Height="505" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnWidth="*">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Binding="{Binding _title}"/>
        <DataGridTextColumn x:Name="dgType" Header="Content Type" Binding="{Binding  _type}"/>
        <DataGridTextColumn Header="Language">
            <DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                    <Style.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Binding="{Binding ElementName=dgType, Path=Content}" Value="A" />
                            </MultiTrigger.Conditions>
                            <Setter Property="Content" Value="{Binding type1.someProperty}" />
                        </MultiTrigger>
                    </Style.Triggers>
                </Style></DataGridTextColumn.CellStyle>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Created At" Binding="{Binding _createdAt}"/>
        <DataGridTemplateColumn Header="Edit/View">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Edit/View" Click="View_Click"></Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid> 


有人能帮我吗?

如果有人需要,我是这样做的

Xaml代码:

<DataGrid x:Name="DgContent" Margin="0,60,-0.4,0" VerticalAlignment="Top" Height="505" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" CanUserAddRows="False" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnWidth="*">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Binding="{Binding Title}"/>
        <DataGridTextColumn Header="Content Type" Binding="{Binding  Type}"/>
        <DataGridTextColumn Header="Language">
            <DataGridTextColumn.Binding>
                <MultiBinding Converter="{StaticResource ResourceKey=Content}">
                    <Binding Path="{x:Static local:MainWindow.cl}"></Binding>
                </MultiBinding>
            </DataGridTextColumn.Binding>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Created At" Binding="{Binding CreatedAt}"/>
        <DataGridTemplateColumn Header="Edit/View">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Edit/View" Click="View_Click"></Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

@Bum我也尝试了多值转换器,但我的可观察集合在主窗口中,当我将IMultivalueConvertor实现到我的customClass时,我不知道如何获取类型的值以进一步检查…@Bum在我的customClass中,我有一个名为'type'(字符串)、'type1'(自定义类)和'type2'(自定义类)的属性它可以有值“A”或“B”,如果是A,那么我用一些值初始化type1,type2=null,反之亦然。@我将再次解释,我有一个wpf应用程序,带有主窗口和三个类,分别是“customClass”、“Type1Class”和“Type2Class”。customClass具有标题(字符串)、类型(字符串)、语言(字符串)、类型1(类型1类)和类型2(类型2类)等属性。在mainWindows中,我将DataGrid的dataContext绑定到observableCollection,并填充值。现在,根据customClass.type的值,属性type1或type2一次初始化,只有一个对象具有值,另一个为null(如果type为'a',则type1对象初始化,type2保持null)。让我们来看看。
public object Convert(object[] values, Type targetType,
           object parameter, System.Globalization.CultureInfo culture)
{
    try
    {
        if (((Content)values[0]).Type == "movie")
        {
            return ((Content)values[0]).Movie.Language;
        }
        else
            return ((Content)values[0]).Video.Language;
    }
    catch (Exception e)
    { return "EXception"; }
}

public object[] ConvertBack(object value, Type[] targetTypes,
       object parameter, System.Globalization.CultureInfo culture)
{
    throw new NotSupportedException("Cannot convert back");
}