我想将WPF数据网格中的文本块文本绑定到依赖项属性。不知何故,什么都没有显示,但当我在网格外使用相同的文本块绑定时,一切正常。以下是我的代码,
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<toolkit:DataGrid Name="definitionGrid" Margin="0,10,0,0" AutoGenerateColumns="False"
CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="False"
RowHeight="25" FontWeight="Normal" ItemsSource="{Binding Subscription}"
ColumnHeaderStyle="{DynamicResource ColumnHeaderStyle}"
SelectionMode="Single" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="450"
ScrollViewer.VerticalScrollBarVisibility="Auto" Height="200">
<toolkit:DataGridCheckBoxColumn Header="Email" Width="60" Binding="{Binding ReceivesEmail}" CellStyle="{StaticResource cellCenterAlign}"/>
<toolkit:DataGridTemplateColumn Header="Others" Width="220" CellStyle="{StaticResource cellCenterAlign}" IsReadOnly="True">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=OtherSubs}"/>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
<TextBlock Text="{Binding Path=OtherSubs}"/>
</StackPanel>
代码隐藏
public string OtherSubs
{
get { return (string)GetValue(OtherSubsProperty); }
set { SetValue(OtherSubsProperty, value); }
}
public static readonly DependencyProperty OtherSubsProperty = DependencyProperty.Register("OtherSubs", typeof(string),
typeof(ProgramSubscriptions), new UIPropertyMetadata(string.Empty));
//other....
for (int i = 0; i < OtherPrgList.Count; i++)
{
foreach (int y in myList)
{
ProgramSubscriptionViewModel otheritem = OtherPrgList[i];
if (y == otheritem.Program.ID)
OtherSubs += otheritem.Subscriber.Username + ", ";
}
}
请告诉我,如果有其他方式可以使我的工作,而不是使用依赖属性,虽然测试我确实在datagrid下面放了一个文本块,它工作得很好.. 救命!
答案 0 :(得分:2)
您的订阅属性必须是 ProgramSubscriptions 对象的集合。它必须至少支持IEnumerable接口。通常,您会有类似列表&lt; ProgramSubscriptions&gt; 的内容。此外, OtherSubs 显然是 ProgramSubscriptions 的属性,这没关系。
请告诉您如何使用“网格外的相同文本块绑定”?
答案 1 :(得分:0)
您正在将DataGrid绑定到Subscription。无论DataGrid的DataContext是什么,这都必须是一个属性。正如wpfwannabe所说,它应该支持IEnumerable。理想情况下,您将拥有ObservableCollection<>
或派生,因此DataGrid会自动更新。
从那里DataGrid将获取它应该显示的项目。要显示实际数据,请使用DataGridTemplateColumn定义。由于绑定到OtherSubs,这意味着Subscription IEnumerable枚举的对象应该具有该属性。顺便说一句,它不需要是一个依赖属性来实现它。