c# – 默认datacontext

前端之家收集整理的这篇文章主要介绍了c# – 默认datacontext前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在MainWindow.xaml中有下面的xaml:
<Window x:Class="TestDependency.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
    <Grid.RowDefinitions>
      <RowDefinition></RowDefinition>
      <RowDefinition></RowDefinition>
      <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Label Name="someLabel" Grid.Row="0"  Content="{Binding Path=LabelText}"></Label>
    <Button Grid.Row="2"  Click="Button_Click">Change</Button>
  </Grid>
</Window>

以下是MainWindow.xaml.cs中的代码

public static readonly DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText",typeof(String),typeof(MainWindow));

public int counter = 0;

public String LabelText
{
  get
  {
    return (String)GetValue(LabelTextProperty);
  }

  set
  {
    SetValue(LabelTextProperty,value);
  }
}

private void Button_Click(object sender,RoutedEventArgs e)
{
  LabelText = "Counter " + counter++;
}

我原以为默认的DataContext就是背后的代码.但是我被迫指定DataContext.哪个DataContext是默认的?空值?我本以为后面的代码就是(就像同一个类一样).

就像在这个示例中我使用后面的代码修改Label的内容,我可以直接使用:

someLabel.Content = "Counter " + counter++;

我希望作为背后的代码,如果DataContext在不同的类中,它不应该有你的UI更新问题.

解决方法

是的,DataContext的默认值为null,这是它在FrameworkElement类中声明的方式 –
public static readonly DependencyProperty DataContextProperty = 
    DependencyProperty.Register("DataContext",typeof(object),FrameworkElement._typeofThis,(PropertyMetadata) new FrameworkPropertyMetadata((object)null,FrameworkPropertyMetadataOptions.Inherits,new PropertyChangedCallback(FrameworkElement.OnDataContextChanged)));

FrameworkPropertyMetadata采用默认值属性的第一个参数.

当它被所有子控件继承时,除非您指定窗口数据上下文,否则lable的DataContext将保持为null.

你可以使用someLabel.Content =“Counter”计数器;在codebehind中设置标签内容;因此,在后面的代码中访问您的控件是完全正常的.

猜你在找的C#相关文章