Я пытаюсь установить пользовательское прикрепленное свойство, к которому я могу привязаться в Xaml. Он отлично работает, если я передаю ему простые строки:
Мои свойства.h:
#pragma once
#include "pch.h"
namespace SimpleApp
{
namespace WUX = Windows::UI::Xaml;
public ref class MyProperties sealed : public WUX::DependencyObject
{
private:
static WUX::DependencyProperty^ _MyValue;
public:
MyProperties::MyProperties();
static property WUX::DependencyProperty^ MyValue
{
WUX::DependencyProperty^ get()
{
return _MyValue;
}
};
static Platform::String^ GetMyValue(WUX::UIElement^ element);
static void SetMyValue(WUX::UIElement^ element, Platform::String^ value);
};
}
Мои свойства.cpp:
#include "pch.h"
#include "MyProperties.h"
using namespace Windows::UI::Xaml;
using namespace SimpleApp;
MyProperties::MyProperties()
{
};
DependencyProperty^ MyProperties::_MyValue = DependencyProperty::RegisterAttached(
"MyValue",
Platform::String::typeid,
MyProperties::typeid,
ref new PropertyMetadata(false)
);
Platform::String^ MyProperties::GetMyValue(UIElement^ element)
{
auto val = safe_cast<Platform::String^>(element->GetValue(_MyValue));
return val;
}
void MyProperties::SetMyValue(UIElement^ element, Platform::String^ stringValue)
{
element->SetValue(_MyValue, stringValue);
OutputDebugString(L"It worked!");
// Also do other stuff
}
Xaml:
<Page
x:Class="SimpleApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SimpleApp"
Width="525"
>
<Grid x:Name="_grid" Width="500" DataContext="{Binding ElementName=_grid}">
<TextBlock local:MyProperties.MyValue="Hello" Text="{Binding Width}" />
</Grid>
</Page>
Это работает — функция SetMyValue выполняется с переданным ей параметром «Hello».
Однако когда я пытаюсь использовать привязку к свойству MyValue, SetMyValue не выполняется. Я заменяю TextBlock этим в Xaml:
<TextBlock local:MyProperties.MyValue="{Binding Width}" Text="{Binding Width}" />
Я также привязываю текст к ширине, чтобы убедиться, что он в целом работает. Есть ли волшебное объявление, которое я должен где-то сделать, чтобы убедить свойство быть привязанным?
NB этот вопрос задает нечто подобное, но для WPF, и спрашивающий не похоже, его проблема все равно не решена.