我必须学会在UWP上编码(这是我在Windows 10和VS的第一步),所以我尝试做一些非常基本的事情:从某些C ++函数中更改文本块。
从技术上讲,我的项目非常简单:我开了一个新的visual C ++> Windows>通用>空白App 我在MainPage.xaml中添加了一个文本块:
<Page
x:Class="App4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App4"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="49,46,0,0" TextWrapping="Wrap" Text="WHAT I WANT TO BIND" VerticalAlignment="Top"/>
</Grid>
</Page>
我试图找出如何绑定文本块。我尝试了几种方法,都失败了。例如,我添加了一个类TestBindMe:
TestBindMe.h
#pragma once
namespace App4
{
ref class TestBindMe sealed
{
public:
TestBindMe();
property Platform::String^ MySuperString
{
Platform::String^ get() {
return this->mySuperString_;
}
}
private:
Platform::String^ mySuperString_;
};
};
TestBindMe.cpp
#include "pch.h"
#include "TestBindMe.h"
namespace App4
{
TestBindMe::TestBindMe()
{
}
};
我在为Text="WHAT I WANT TO BIND"
Text={x:Bind TestBindMe.get}
后尝试构建它
我得到了那个输出:
1>------ Build started: Project: App4, Configuration: Debug Win32 ------
1> App.xaml.cpp
1> MainPage.xaml.cpp
1> TestBindMe.cpp
1>c:\users\user\documents\visual studio 2015\projects\app4\app4\testbindme.cpp(1): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "pch.h"' to your source?
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========
答案 0 :(得分:1)
正如Clemens所说, {x:Bind}
使用页面或用户控件本身作为默认来源。
它将查看页面或用户控件的代码隐藏属性,字段和方法。要将视图模型公开为 {x:Bind} ,您通常需要为页面或用户控件的后台代码添加新字段或属性。属性路径中的步骤由点(。)分隔,并且您可以包含多个分隔符以遍历连续的子属性。无论用于实现绑定对象的编程语言如何,都使用点分隔符。
因此,我们可以在MainPage
的{{1}}代码隐藏中添加一个属性。请注意
对于C ++ / CX, {x:Bind} 无法绑定到页面或数据模型中的私有字段和属性 - 您需要具有公共属性才能使其可绑定。
有关详细信息,请参阅{x:Bind} markup extension。
所以我改变了你的 TestBindMe.h ,如下面的
{x:Bind}
在 MainPage.xaml.h 中,添加一个名为&#34; ViewModel&#34;的公共属性。其类型为namespace App4
{
public ref class TestBindMe sealed
{
public:
TestBindMe();
property Platform::String^ MySuperString
{
Platform::String^ get() {
return this->mySuperString_;
}
}
private:
Platform::String^ mySuperString_ = "My Bind Test";
};
}
:
TestBindMe
然后在 MainPage.xaml.cpp 中,初始化#include "MainPage.g.h"
#include "TestBindMe.h"
namespace App4
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public ref class MainPage sealed
{
public:
MainPage();
property App4::TestBindMe^ ViewModel;
};
}
:
ViewModel
在此之后,我们可以在XAML中使用MainPage::MainPage()
{
InitializeComponent();
ViewModel = ref new TestBindMe();
}
,例如{x:Bind}
这是一个简单的示例,您可以在GitHub上找到官方x:Bind sample。