.net 为什么绑定不适用于WPF DataGrid上的DataGrildTemplateColumn?
我在WPF用户控件(MVVM)中定义了一个.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
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”)。尽管如此,我本以为它会抓住假装订。谢谢你的指点!