1

我对 xaml 很陌生。我环顾四周,发现的帖子与我正在尝试做的事情很接近,但我无法准确找到我正在寻找的内容。

我有一个具有依赖属性的外部 WPF UserControl。在另一个项目中,我从我的 UserControl 库中导入了 dll。我在我的项目中创建了一个静态网格,其中每个单元格中都有一个我的用户控件的实例。我定义的每个 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]”或其变体,但我似乎无法得到类似的东西。我接近绑定方法错了吗?

这是我的用户控件代码:

 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;

更新:这是我解决此问题的方法:

首先,我在我的项目中创建一个静态数据源,其中包含我要绑定到的列。向查询添加参数,以便我可以指定要检索的数据。

在我的窗口中将以下内容添加到 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" />

剩下一点工作来满足我的需要,但这是基本的想法。我很肯定这不仅仅是一种方法,但这应该对我有用。

4

0 回答 0