Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.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
.net 为什么绑定不适用于WPF DataGrid上的DataGrildTemplateColumn?_.net_Wpf_Mvvm_Binding_Datagrid - Fatal编程技术网

.net 为什么绑定不适用于WPF DataGrid上的DataGrildTemplateColumn?

.net 为什么绑定不适用于WPF DataGrid上的DataGrildTemplateColumn?,.net,wpf,mvvm,binding,datagrid,.net,Wpf,Mvvm,Binding,Datagrid,我在WPF用户控件(MVVM)中定义了一个DataGrid。 我试图使用DataGridTemplateColumns来定义DataGrid内容 以下是我的视图模型中数据的外观: public class CompanyClass { public string Name { get; set;} public string Location { get; set; } } public ObservableCollection<CompanyClass> Compan

我在WPF用户控件(MVVM)中定义了一个
DataGrid
。 我试图使用
DataGridTemplateColumns
来定义
DataGrid
内容

以下是我的视图模型中数据的外观:

public class CompanyClass
{
   public string Name { get; set;}
   public string Location { get; set; }
}

public ObservableCollection<CompanyClass> CompanyList = // Fill with Data;
<Grid Name="SampleGrid"
      Width="{Binding ActualWidth, ElementName=NegativeAccountsBalances}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
  <DataGrid Name="SampleDataGrid"
            AutoGenerateColumns="False"
            ItemsSource="{Binding CompanyList}"
            Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid,AncestorLevel=1}}"
            IsReadOnly="True"
            SelectionMode="Extended"
            SelectionUnit="CellOrRowHeader"
            HorizontalScrollBarVisibility="Auto"  
            VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
      <DataGridTemplateColumn Width="SizeToCells" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <StackPanel Orientation="Vertical">
              <TextBlock Name="txtCompanyName" Text="{Binding Path=Name}" Height="200" Width="200"/>
              <TextBlock Text="{Binding Location}" Height="20" Width="20"/>
            </StackPanel>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>
</Grid>
public ObservableCollection<CompanyClass> CompanyList { get; } = new ObservableCollection<CompanyClass>();
公共类公司类
{
公共字符串名称{get;set;}
公共字符串位置{get;set;}
}
public ObservableCollection CompanyList=//填入数据;
以下是XAML中的DataGrid定义:

public class CompanyClass
{
   public string Name { get; set;}
   public string Location { get; set; }
}

public ObservableCollection<CompanyClass> CompanyList = // Fill with Data;
<Grid Name="SampleGrid"
      Width="{Binding ActualWidth, ElementName=NegativeAccountsBalances}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
  <DataGrid Name="SampleDataGrid"
            AutoGenerateColumns="False"
            ItemsSource="{Binding CompanyList}"
            Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid,AncestorLevel=1}}"
            IsReadOnly="True"
            SelectionMode="Extended"
            SelectionUnit="CellOrRowHeader"
            HorizontalScrollBarVisibility="Auto"  
            VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
      <DataGridTemplateColumn Width="SizeToCells" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <StackPanel Orientation="Vertical">
              <TextBlock Name="txtCompanyName" Text="{Binding Path=Name}" Height="200" Width="200"/>
              <TextBlock Text="{Binding Location}" Height="20" Width="20"/>
            </StackPanel>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>
</Grid>
public ObservableCollection<CompanyClass> CompanyList { get; } = new ObservableCollection<CompanyClass>();

由于某些原因,我似乎无法使我的
DataTemplate
中的
TextBlock
控件的绑定工作。我正在将
ItemSource
设置为ViewModel中包含的“Company”集合

我在这里遗漏了什么/做错了什么

我在VS输出窗口中没有看到任何错误。 如果我尝试将
TextBlock
绑定到伪值,我仍然看不到任何错误。 不知何故,我似乎没有正确地设置绑定

有人能告诉我正确的方向吗


谢谢

公司列表
是一个字段。不能绑定到字段。只能绑定到属性。它需要一个能手和一个二传手

确保只在构造函数中或使用C#6中引入的初始化器语法初始化一次
CompanyList
属性:

公共类视图模型
{
公共视图模型()
{
CompanyList=新的ObservableCollection();
//popuoate集合。。。
添加(新的CompanyClass(){Name=“test….”});
}
公共可观测集合公司列表{get;private set;}
}
C#6+:

public class CompanyClass
{
   public string Name { get; set;}
   public string Location { get; set; }
}

public ObservableCollection<CompanyClass> CompanyList = // Fill with Data;
<Grid Name="SampleGrid"
      Width="{Binding ActualWidth, ElementName=NegativeAccountsBalances}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
  <DataGrid Name="SampleDataGrid"
            AutoGenerateColumns="False"
            ItemsSource="{Binding CompanyList}"
            Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid,AncestorLevel=1}}"
            IsReadOnly="True"
            SelectionMode="Extended"
            SelectionUnit="CellOrRowHeader"
            HorizontalScrollBarVisibility="Auto"  
            VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
      <DataGridTemplateColumn Width="SizeToCells" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <StackPanel Orientation="Vertical">
              <TextBlock Name="txtCompanyName" Text="{Binding Path=Name}" Height="200" Width="200"/>
              <TextBlock Text="{Binding Location}" Height="20" Width="20"/>
            </StackPanel>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>
</Grid>
public ObservableCollection<CompanyClass> CompanyList { get; } = new ObservableCollection<CompanyClass>();
public observetecollection CompanyList{get;}=new observetecollection();

1。公司名单是公开的还是私人的?2.CompanyList是否确实有数据(比如,您调试并看到它有数据)?CompanyList定义为PublicObservableCollection CompanyList。是的,它确实有数据(调试和验证)。这肯定是一个有约束力的问题。如果我使用假字段名“FOO”绑定到,我在VS输出窗口中看不到任何异常/错误。请说明如何初始化集合
CompanyList
。我知道你遗漏了什么。再一次,根据之前的评论。如果我在我的绑定中输入了一个伪值,我看不到异常。MK:是的,你发现了什么。初始化可观察集合时,我需要执行OnNotifyPropertyChanged(“CompanyList”)。尽管如此,我本以为它会抓住假装订。谢谢你的指点!