【问题标题】:DataBinding and Incomplete Microsoft Documentation数据绑定和不完整的 Microsoft 文档
【发布时间】:2018-06-04 19:01:30
【问题描述】:

基本上,我正在阅读有关 WPF 的 Microsoft 教程: https://docs.microsoft.com/en-us/dotnet/opbuildpdf/framework/wpf/data/toc.pdf?branch=live

我到了第 8 页,并且(在我看来)微软搞砸了。他们没有提供运行以下 XAML 所需的任何 C# 代码隐藏:

<DockPanel
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample">
  <DockPanel.Resources>
    <c:MyData x:Key="myDataSource"/>
  </DockPanel.Resources>
  <DockPanel.DataContext>
    <Binding Source="{StaticResource myDataSource}"/>
  </DockPanel.DataContext>
  <Button Background="{Binding Path=ColorName}" Width="150" Height="30">
    I am bound to be RED!</Button>
</DockPanel> 

我尽可能地遵循他们的描述,但我得到的只是以下错误消息。

The name "MyData" does not exist in the namespace "clr-namespace:SDKSample".    

我做了我应该做的:创建一个 c# 文件,使用“添加新项目”并构建它,但仍然会再次弹出错误代码。为了让人们不必查找文档,他们要求以下内容:

考虑以下示例,其中绑定源对象是 在 SDKSample 命名空间中定义的名为 MyData 的类。为了 出于演示目的,MyData 类有一个名为的字符串属性 ColorName,其值设置为“红色”。因此,这个例子 生成一个带有红色背景的按钮。

我查看了此示例的各种 SDK,希望能在某处找到神秘的 C# 文件,但可惜我找不到。微软似乎忘记了链接。你知道,即使它在 SDK 中的某个地方,也很难找到。作为一个处于学习模式的人,我希望所有的细节都将在文档中提供,而不仅仅是上面的引用,它没有详细说明将 C# 文件放在哪里,你如何应该构建,因此它将正确注册为现有。

因此,如果有人可以通过在“SDKSamples”命名空间中创建一个名为“MyData”的 C# 类来找到关于如何使 XAML 代码工作的很好的描述,我将不胜感激。

【问题讨论】:

    标签: xaml


    【解决方案1】:

    当您添加以下内容时,xaml 可以工作:

    namespace SDKSample
    {
        public class MyData
        {
            public Brush ColorName { get; set; } = Brushes.Red;
        }
    }
    

    【讨论】:

    • 我做错了什么?我开始了一个新项目,打开 MainWindow.XAML.cs 文件,然后将您的代码放在创建新项目后自动生成的代码的正下方。我刚刚剪切和粘贴的 XAML 内容。我仍然收到这个错误:`“名称“MyData”在命名空间“clr-namespace:SDKSample”中不存在。`
    • 您尝试构建吗?运行程序?
    • 你好米兰。 TY 的帮助。是的,我尝试构建并运行它。它甚至没有进入构建阶段。我也从这个页面尝试了一些东西:stackoverflow.com/questions/216749/… 但它仍然有同样的错误。不过,这确实告诉了我一些事情。就好像我创建的 C# 类在 XAML 代码中根本不存在。我可以将 xmlns:c="clr-namespace:SDKSample"> 行更改为 xmlns:c="XXXXXXXXXXXXXX" 并得到相同的错误。
    • 清理并重建解决方案? ;/“它甚至没有进入构建阶段”是什么意思?清理并重建解决方案后,您在构建输出中看到什么输出?是不是说有些东西构建失败了?
    • 在“清洁解决方案”和“构建解决方案”之后,它只是在屏幕左下方显示“构建失败”。报错信息和之前一样,命名空间“clr-namespace:SDKSample”中不存在“MyData”。
    【解决方案2】:
    <Window x:Class="StackExchangeQuestion.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:StackExchangeQuestion"
        mc:Ignorable="d"
        xmlns:c="clr-namespace:SDKSample"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel >
        <DockPanel.Resources>
            <c:MyData x:Key="myDataSource"/>
        </DockPanel.Resources>
        <DockPanel.DataContext>
            <Binding Source="{StaticResource myDataSource}"/>
        </DockPanel.DataContext>
        <Button Background="{Binding Path=ColorName}" Width="150" Height="30">
            I am bound to be RED!</Button>
    </DockPanel>
    </Window>
    

    我想补充一点,Microsoft 假设您已经拥有&lt;Window x:Class and Width="525"&gt; 之间的所有内容。在他们的文档中遗漏大量细节是一种草率的工作。感谢 Milan 让我查看代码的 &lt;Window&gt;...&lt;/Window&gt; 部分应该包含哪些内容。

    另外,为了完整起见,C# 代码:

    using System.Windows;
    using System.Windows.Media;
    
    namespace StackExchangeQuestion
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }
    }
    
    namespace SDKSample
    {
        public class MyData
        {
            public Brush ColorName { get; set; } = Brushes.Red;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2011-05-25
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      相关资源
      最近更新 更多