WPF数据绑定Itemscontrol中的备用datacontext

时间:2015-05-27 17:12:40

标签: c# wpf xaml data-binding datacontext

我要做的是将ItemsControl.ItemTemplate生成的控件绑定到我运行查询函数时创建的ContactInterface类的新实例。

ContactInterface.cs:

class ContactInterface : INotifyPropertyChanged
{
    public string Type { get; set; }

    private string firstname;
    public string FirstName { 
        get{return this.firstname;}
        set {
            if (this.firstname != value) {
                this.firstname = value;
                this.NotifyPropertyChanged("FirstName");
            }
        }
    }
        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
}

SQL.cs

partial class MainWindow
{
    private void selectContact(int? contactID)
    {
        using (ContactsDataContext context = new ContactsDataContext("Data Source=ds;Initial Catalog=db;Integrated Security=True"))
        {
            Contact contact = context.Contacts.SingleOrDefault(x => x.ContactID == contactID);
            Contact spouse = context.Contacts.SingleOrDefault(x => x.ContactID == contact.Spouse);
            Property property = context.Properties.SingleOrDefault(x => x.PropertyID == contact.Address);

            ContactInterface selectedContact= new ContactInterface();

            selectedContact.FirstName = contact.FirstName;

            profileGrid.DataContext = selectedContact;
        }

    }

MainWindow.xaml

            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="300" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <ItemsControl Name="Profile_Page_Controls">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Grid Margin="15">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="100" />
                                    <ColumnDefinition Width="30" />
                                    <ColumnDefinition Width="100" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />
                                <RowDefinition Height="43" />

                            </Grid.RowDefinitions>
                            </Grid>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding TextContent}"/>
                                <TextBox Height="23" Text="{Binding Path=FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }"/>
                            </StackPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                <ItemsControl.ItemContainerStyle>
                    <Style>
                        <Setter Property="Grid.Column" Value="{Binding profile_Column}" />
                        <Setter Property ="Grid.Row" Value="{Binding profile_Row}" />
                        <Setter Property="Grid.ColumnSpan" Value="{Binding profile_Colspan}" />
                    </Style>
                </ItemsControl.ItemContainerStyle>
            </ItemsControl>
                <CheckBox Name="profile_SpouseCheck" Grid.Column="1" Margin="0,0,0,0" Checked="profile_SpouseCheck_Checked_1" Unchecked="profile_SpouseCheck_Checked_1"> Spouse</CheckBox>


            </Grid>

我的计划是每次用户运行selectContact()函数时创建一个新的ContactInterface实例。该新实例将绑定到生成的控件,因此当用户进行并保存更改时,文本框将更新该ContactInterface实例,而我的其他函数可以从该ContactInterface获取数据以对数据库进行更改。

有什么想法吗?

0 个答案:

没有答案