Я пытаюсь установить пользовательские вложенное свойство, которое я могу связать в Xaml Он отлично работает, если я прохожу его простые строки:Связывание пользовательского свойства в Xaml (Windows 8.1
MyProperties.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);
};
}
MyProperties.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 this question спрашивает что-то подобное, но для WPF, и, как ни странно, его проблема не решена.