请帮忙......我在这里做错了什么?尝试将listbox绑定到datatable。在调试之后,我看到表中的数据行,但有些是如何不绑定到列表框。
FYI。 _这是我当前窗口的名称......
<ListBox Grid.Column="1" ItemsSource="{Binding ElementName=_this, Path=MainCategoriesTable}" HorizontalAlignment="Center" BorderBrush="Transparent" Background="Transparent" x:Name="lbMainCategories">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton Grid.Column="0" Content="{Binding Path=main_category_name}" VerticalAlignment="Center" GroupName="grpMainCategory" x:Name="rdbEnableDisable" />
<Label Grid.Column="1" Width="30" Background="Transparent" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以下是尝试与...绑定的属性
public DataTable MainCategoriesTable
{
get { return _dtMainCategory; }
set { _dtMainCategory = value; }
}
答案 0 :(得分:0)
对于XAML设置数据上下文tocode,这对我有用
DataContext="{Binding RelativeSource={RelativeSource Self}}"
中的代码
this.DataContext = this;
但我使用了_this就像你已成功使用它一样。
在所有XAML绑定中设置Presentation.Trace = High。这不是确切的语法,但如果你从Presentation开始,它应该是显而易见的。
为什么标签上没有绑定。
main_category_name是公共属性?我注意到它是小写的。
答案 1 :(得分:0)
DataTable
就像字典一样,不像对象。它不会将您的列公开为属性,但每个DataRow
都会公开可用于获取单元格值的indexer。因此,您需要使用索引器语法:
<RadioButton Grid.Column="0" Content="{Binding Path=[main_category_name]}" VerticalAlignment="Center" GroupName="grpMainCategory" x:Name="rdbEnableDisable" />
<强>更新强>
困扰我的另一件事是你的MainCategoriesTable
财产没有通知变更。如果在所有Bindings
初始化后它已更改,则它将无效(而DependencyProperty
将会有效,因为它始终会通知有关更改)。要使其工作,您的上下文类必须实现INotifyPropertyChanged
接口,您的属性必须如下所示:
public DataTable MainCategoriesTable
{
get { return _dtMainCategory; }
set
{
if(value == _dtMainCategory)
{
return;
}
_dtMainCategory = value;
var h = this.PropertyChanged;
if(h != null)
{
h(this, new PropertyChangedEventArgs("MainCategoriesTable"));
}
}
}