C# 窗口不显示。WPF

C# 窗口不显示。WPF,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我用一个按钮创建了一个DataGridTemplateColumn。我用命令绑定了它,但是在我点击它之后,什么也没发生。但是,如果我将按钮移到DataGrid的外部,它就可以正常工作 <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding MedCards}"> <DataGrid.Colum

我用一个按钮创建了一个
DataGridTemplateColumn
。我用
命令绑定了它,但是在我点击它之后,什么也没发生。但是,如果我将按钮移到DataGrid的外部,它就可以正常工作

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding MedCards}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding = "{Binding Id, Mode=TwoWay}"/>
        <DataGridTextColumn Header="ID клиента" Binding = "{Binding Client_Id, Mode = TwoWay}"/>
        <DataGridTextColumn Header="Вес" Binding = "{Binding Weight, Mode = TwoWay}"/>
      <!--  <DataGridTextColumn Header="Рекомендация" Binding = "{Binding Recommend, Mode = TwoWay}"/> -->
        <DataGridTemplateColumn Header="Рекомендация">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Command="{Binding Path=ShowRecommendCommand}" CommandParameter="{Binding Recommend}" Content="Посмотреть"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <!-- -->
            <DataGridTextColumn Header="Рост" Binding = "{Binding Height, Mode = TwoWay}"/>
        <DataGridTextColumn Header = "Проблемы" Binding = "{Binding Problems, Mode = TwoWay}"/>
        <DataGridTextColumn Header = "BodyType" Binding = "{Binding BodyType, Mode = TwoWay}"/>
    </DataGrid.Columns>
</DataGrid>

您的
按钮
位于
数据模板
内,因此无法直接访问外部数据上下文。试试这个

给你的
DataGrid
起个名字

<DataGrid Name="myGrid" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding MedCards}">

另外,为了便于将来参考,在调试时打开即时窗口以查看绑定错误。

虽然解决方案是正确的,但解释绝对不正确。而且,绑定错误会显示在输出窗口中,而不是立即显示。@Yevgeniy请随意详述为什么您认为我的解释是错误的。该按钮不在其父数据上下文中,因此需要为其提供到达该位置的方法。绑定错误会输出到VS2015中的即时窗口,至少对我来说是这样。按钮位于其父数据上下文中。问题在于其数据上下文不是DataGrid数据上下文,而是存储在DataGrid项源中的对象(具有Id、Client_Id、Weight和其他属性的类)。由于没有ShowRecommendCommand属性,因此绑定不起作用。如果您的解释是正确的,CommandParameter=“{Binding Recommend}”也不会起作用。据我所知,具有我上面提到的属性的类是RecommendViewModel。如果是这样,使用CommandParameter=“{Binding}”并将命令参数强制转换为RecommendViewModel将是一个更好的解决方案,因为不需要创建额外的RecommendViewModel实例。@YevGeny我没有说它没有数据上下文,我说它没有访问外部数据上下文的权限,即aka。DataGrid数据上下文。
{Binding Recommended}
是相对于项上下文而不是父上下文的,因此没有理由不起作用。我不知道OPs用例是什么,但没有迹象表明
MedCards
RecommendViewModel
的集合,因此绑定到对象本身可能无效。不管怎样,我的解释都是正确的,Button不能直接访问其父数据上下文。
<DataGrid Name="myGrid" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding MedCards}">
<Button Command="{Binding Path=DataContext.ShowRecommendCommand, ElementName=myGrid}" CommandParameter="{Binding Recommend}" Content="Посмотреть"/>