DataBinding和不完整的Microsoft文档

时间:2017-12-22 05:16:14

标签: xaml

基本上,我正在编写关于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,其值设置为“Red”。因此,这个例子   生成一个红色背景的按钮。

我已经查看了这个示例的各种SDK,希望我能在某个地方找到神秘的C#文件,但是我找不到它。好像微软忘记了一个链接。你知道,即使它在SDK中的某个地方,也很难找到。作为处于学习模式的人,我希望文档中提供所有细节,而不仅仅是上面的引用,其中没有详细说明放置C#文件的位置,你是怎么做的应该建立所以它将正确注册为现有。

所以,如果有人能找到一个很好的描述如何使XAML代码工作,通过在“SDKSamples”命名空间中创建一个名为“MyData”的C#类,我将非常感激。

2 个答案:

答案 0 :(得分:0)

添加以下内容时xaml可以使用:

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

答案 1 :(得分:0)

<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假定您已经拥有<Window x:Class and Width="525">之间的所有内容。只是在他们的文档中遗漏了大量的细节,这是一种草率的工作。感谢米兰让我看看代码<Window>...</Window>部分应该包含哪些内容。

另外,为了完整性,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;
    }
}