关于DataContext的

weikeni19 2017-05-06 03:23:34
请问我书上的(2)怎么用?我自己写了一段代码 但没显示 该怎么改?或者你们写一段代码给我看看 谢谢了 高分献上
书上的内容:

我的代码是这样的
XAML代码是这样的 我在项目里新建了一个窗口Window1
<Window x:Class="WpfApplication5.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox Text="{Binding Id}"/>
</Grid>
</Window>
--------------------------------------------------------------------------
MainWindow的Xaml代码是这样的:
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:WpfApplication5"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<StackPanel.DataContext>
<sys:Student Id="6"/>
</StackPanel.DataContext>
<Button Click="Button_Click_1"/>
</StackPanel>
</Window>
----------------------------------------------------------------------
C#后台代码是这样的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication5
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
Window1 a = new Window1();
a.ShowDialog();
}
}
public class Student
{
public int Id { get; set; }
}
}


...全文
257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2017-05-08
  • 打赏
  • 举报
回复
其实那段话表达的意思就是: 当要访问一个 访问级别为private的控件的时候,把该控件指定为当前window(也就是窗体)的DataContext 因为window是最顶级元素,并且是public的,所以 就可以直接访问window的DataContext。 取值得时候要对DataContext进行类型转换。
exception92 2017-05-08
  • 打赏
  • 举报
回复
a.textBox2.Text = (string)(this.DataContext); -> 这样不对。 this.DataContext 是当前MainWindow的DataContext,而不是StackPanel 的DataContext。 (string)(this.DataContext) -》如果指定了 MainWindow 的DataContext,类似: <Window.DataContext> <TextBox x:Name="textBox1" Text="李伟科死啦恶魔们欢呼吧" x:FieldModifier="private"/> </Window.DataContext> 就不应该转为String 类型,而是TextBox类型,再取它的Text属性值。
weikeni19 2017-05-06
  • 打赏
  • 举报
回复
我又改了一下: 在项目里新建一个窗口Window1 XAML代码如下: <Window x:Class="WpfApplication18.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:WpfApplication18" Title="Window1" Height="300" Width="300"> <Grid> <TextBox x:Name="textBox2" Text="{Binding Text}"/> </Grid> </Window> ------------------------------------------------------------------------------------------------------------------------------ MainWindow里的XAML代码如下: <Window x:Class="WpfApplication18.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"> <StackPanel x:Name="weikeli"> <StackPanel.DataContext> <TextBox x:Name="textBox1" Text="李伟科死啦恶魔们欢呼吧" x:FieldModifier="private"/> </StackPanel.DataContext> <Button Click="Button_Click_1"/> </StackPanel> </Window> ------------------------------------------------------------------------------------------------------ C#后台代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using WpfApplication18; namespace WpfApplication18 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click_1(object sender, RoutedEventArgs e) { Window1 a = new Window1(); a.textBox2.Text = (string)(this.DataContext); a.ShowDialog(); } } }
weikeni19 2017-05-06
  • 打赏
  • 举报
回复
我改了一下 不知道是不是书上的意思 但不是private访问级别 而是public 在项目里新建一个窗口Window1 XAML代码如下: <Window x:Class="WpfApplication5.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:WpfApplication5" Title="Window1" Height="300" Width="300"> <Grid> <Grid.DataContext> <sys:MyButton Id="6" /> </Grid.DataContext> <TextBox Text="{Binding Id}"/> </Grid> </Window> ------------------------------------------------------------------------------------------ MainWindow里的XAML代码如下: <Window x:Class="WpfApplication5.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:WpfApplication5" Title="MainWindow" Height="350" Width="525"> <StackPanel> <sys:MyButton/> </StackPanel> </Window> ------------------------------------------------------------------------------------------ C#后台代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication5 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MyButton : Button { public int Id { get; set; } protected override void OnClick() { Window1 a = new Window1(); a.ShowDialog(); } } }
weikeni19 2017-05-06
  • 打赏
  • 举报
回复
书上是不是有错啊 ?好像没有一个控件是private访问级别的啊!

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧