后,我有一个用户控件(AgreementDetails)在WPF与下面的DependencyProperty和功能:依赖属性重置设置的DataContext
// UserControl AgreementDetails
public int AgreementID
{
get { return Convert.ToInt32(GetValue(AgreementIDProperty)); }
set { SetValue(AgreementIDProperty, value); }
}
public static readonly DependencyProperty AgreementIDProperty = DependencyProperty.Register("AgreementID", typeof(int), typeof(UC1001_AgreementDetails_View), new PropertyMetadata(null));
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
int id = AgreementID;
if (id > 0)
{
GetData();
SetBindingContext();
this.Visibility = System.Windows.Visibility.Visible;
}
else
{
this.Visibility = System.Windows.Visibility.Collapsed;
}
}
private void GetData()
{
ConsultantServiceClient client = new ConsultantServiceClient();
_contract = new UC1001_ActiveAgreementContract();
_contract = client.GetAgreementDetailsByAgreementID(AgreementID);
}
private void SetBindingContext()
{
this.DataContext = _contract;
}
我用这个用户控件来显示在另一个用户控件(控制板)一个提示,我设置在AGREEMENTID属性:
// Dashboard
<Setter Property="DataGridCell.ToolTip">
<Setter.Value>
<my:UC1001_AgreementDetails_View Background="#FFF" Opacity="0.88" AgreementID="{Binding Months[9].AgreementID}"/>
</Setter.Value>
</Setter>
在AgreementDetails,我用的是AGREEMENTID来从数据库中获取一些数据在用户控件来显示。我这样做的第一次,一切顺利。但是,当我在AgreementDetails中将传入的WCF DataContract设置为datacontext时,AgreementID属性重置为0,因此第二次调用将不起作用,因为显然我没有与AgreementID = 0达成一致。我检查并将AgreementID重置为SetBindingContext ();方法设置DataContext之后。
我如何使它在AgreementDetails中设置新的dataContext后不会重置AgreementID属性?
如果需要可以提供更多信息。
编辑:我现在有下面的代码:
// Dependency properties
public int AgreementID
{
get { return (int)GetValue(AgreementIDProperty); }
set { SetValue(AgreementIDProperty, value); }
}
public UC1001_ActiveAgreementContract AgreementDetailsContract
{
get { return (UC1001_ActiveAgreementContract)GetValue(AgreementDetailsContractProperty); }
set { SetValue(AgreementDetailsContractProperty, value); }
}
public static readonly DependencyProperty AgreementIDProperty = DependencyProperty.Register("AgreementID", typeof(int), typeof(UC1001_AgreementDetails_View), new PropertyMetadata(null));
public static readonly DependencyProperty AgreementDetailsContractProperty = DependencyProperty.Register("AgreementDetailsContract", typeof(UC1001_ActiveAgreementContract), typeof(UC1001_AgreementDetails_View), new PropertyMetadata(null));
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
int id = AgreementID;
if (id > 0)
{
GetData();
SetBindingContext();
this.Visibility = System.Windows.Visibility.Visible;
}
else
{
this.Visibility = System.Windows.Visibility.Collapsed;
}
}
private void GetData()
{
ConsultantServiceClient client = new ConsultantServiceClient();
AgreementDetailsContract = client.GetAgreementDetailsByAgreementID(AgreementID);
}
private void SetBindingContext()
{
this.DataContext = AgreementDetailsContract;
}
我仍然有该DataContext设置后AGREEMENTID重置为0的问题。
此外,当我用下面的语句来绑定,我得到一个空标签:
<Label Content="{Binding RelativeSource={RelativeSource Self}, Path=AgreementDetailsContract.EndClientName}" />
解决:
我删除了SetDataBinding()方法,以便绑定不重置我DependencyProperty和我的标签的绑定我使用了以下Binding(而不是RelativeSource Self):
<Label Content="{Binding ElementName=AgreementDetails, Path=AgreementDetailsContract.EndClientName}" Grid.Column="1" Grid.Row="1" Height="28" HorizontalAlignment="Left" Margin="11,0,0,0" Name="_labelEindklant" VerticalAlignment="Top" />
Elem entName = AgreementDetails是我的UserControl的名称。奇怪的是{RelativeSource Self}它不起作用...
所以您将*秒*用户控件的DataContract的DataContext的?并且DataContract在路径'Months [9] .AgreementID'中有一个非零值的属性? –
“但是当我将传入的WCF DataContract设置为UserControl的datacontext时,AgreementID属性重置为0” 我需要知道在执行上述操作时界面上的AgreementID值是多少。它是否也更新为0? –
这两个UserControl有两个不同的合约作为它的dataContext。问题是在DataContext在工具提示UserControl –