我对xaml很新。我已经看了很多,我发现的帖子接近我正在尝试的内容,但我找不到我正在寻找的内容。
我有一个带有依赖属性的外部WPF UserControl。在另一个项目中,我从UserControl库中导入了dll。我在我的项目中创建了一个静态网格,其中每个单元格中都有一个usercontrol实例。我定义的每个UserControl DependencyProperty都可以在xaml中找到。
在运行时,我将使用数据填充DataTable,然后我需要将网格中的UserControls绑定到DataTable,以便每个UserControl都反映DataTable中的值。 DataTable中的每一行都有几个列值,我需要绑定到UserControl的依赖项属性。
我遇到的问题是在检索数据之后定义DataContext,以便我可以在每个UserControls中为Dependency属性定义绑定路径。如果我将我的网格的DataContext设置为DataTable,如下所示:
Grid.DataContext = myDataTable;
那么UserControl属性的绑定路径的语法是什么?
<my:ucControl Name="myUserControl1" MyDependencyProp="{Binding Path=??}" Grid.Column="1" Grid.Row="1" />
我见过一些帖子,其中一些人使用过“Row [0] [column_name]”或其变体,但我似乎无法得到类似的工作。我接近绑定方法错了吗?
这是我的UserControl代码:
public partial class ucControl : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public static DependencyProperty IndexProperty =
DependencyProperty.Register("Index", typeof(int), typeof(ucControl));
public static DependencyProperty StatusProperty =
DependencyProperty.Register("Status", typeof(String), typeof(ucControl),
new PropertyMetadata(string.Empty, new PropertyChangedCallback(NotifyPropertyChanged)));
#region PublicProperties
public int Index
{
get { return (int)GetValue(IndexProperty); }
set { SetValue(IndexProperty, value); }
}
public String Status
{
get { return (int)GetValue(StatusProperty); }
set { SetValue(StatusProperty, value); }
}
#endregion
}
这是XAML:
<Grid Canvas.Left="17" Canvas.Top="46" Name="MasterGrid" Width="1259" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Name="ColumnHeader" Height="25" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="DateColumn" Width="80"/>
<ColumnDefinition Width="65"/>
<ColumnDefinition Width="65"/>
<ColumnDefinition Width="65"/>
</Grid.ColumnDefinitions>
<my:ucControl Name="myControl1" Index="{Binding ??}" Status="{Binding ??}" Grid.Column="1" Grid.Row="1" Grid.RowSpan="1" />
<my:ucControl Name="myControl2" Index="{Binding ??}" Status="{Binding ??}" Grid.Column="1" Grid.Row="2" Grid.RowSpan="1" />
<my:ucControl Name="myControl3" Index="{Binding ??}" Status="{Binding ??}" Grid.Column="1" Grid.Row="2" Grid.RowSpan="1" />
</Grid>
这是我的C#:
String strViewSelect = "SELECT index, status, FROM Table1 ORDER BY index ASC;
System.Data.DataSet dsMonthData = dataClass.mFillDataset(strViewSelect);
MasterGrid.DataContext = dsMonthData;
更新:以下是我解决这个问题的方法:
首先,我在项目中创建一个静态DataSource,其中包含我想要绑定的列。向查询添加参数,以便我可以指定要检索的数据。
以下内容已添加到我窗口的XAML中:
<Window.Resources>
<my1:myDataSet x:Key="myDataSet" />
<CollectionViewSource x:Key="tableNameViewSource" Source="{Binding Path=tableName, Source={StaticResource myDataSet}}" />
</Window.Resources>
接下来,我将以下XAML添加到我的网格中:
DataContext="{StaticResource tableNameViewSource}"
现在,我可以将绑定添加到我的UserControl属性中:
Status="{Binding Path=statusColumn}"
<my:ucCalendarCell Name="ucControl1" Status="{Binding Path=statusColumnName}" Index="{Binding Path=indexColumnName}" Grid.Column="1" Grid.Row="1" Grid.RowSpan="1" />
还有一些工作可以满足我的需求,但这是基本的想法。我很肯定这不仅仅是一种方法,但这对我有用。