#c #uwp #visual-studio-2019 #uwp-xaml #datacontext
#c #uwp #visual-studio-2019 #uwp-xaml #datacontext
Вопрос:
Я использую UWP для создания приложения для серверного приложения, и я создал класс serverclass.h на c , в котором у меня есть строковый вывод. Теперь я хочу распечатать этот вывод в текстовом поле в xaml. Я приложил приведенные ниже коды. Когда я использую this-> DataContext=ser; он выдает мне сообщение об ошибке:»функция Windows ::UI::Xaml ::FrameworkElement::DataContext::set не может быть вызвана с заданным списком аргументов». В чем здесь проблема?
mainpage.xaml.cpp
serverclass ser;
MainPage::MainPage()
{
InitializeComponent();
this->DataContext = ser;
}
void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
ser.output = "hey";
ser.connect();
}
serverclass.h
class serverclass
{
public:
string output;
}
"mainpage.xaml"
<TextBox Text="{Binding output}" Height="50" FontSize="30px">
</TextBox>
Ответ №1:
Если вы хотите распечатать вывод строки в текстовом поле в xaml, вы можете использовать привязку данных, ссылающуюся на документ и образец.
Для упомянутого вами сценария вы можете проверить следующий код: serverclass.h
namespace YourAppName{//Put the serverclass into the namespace
public ref class serverclass sealed : Windows::UI::Xaml::Data::INotifyPropertyChanged
{
private:
Platform::String^ output;
public:
virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;
serverclass()
{ }
property Platform::String^ Output {
Platform::String^ get() { return output; }
void set(Platform::String^ value) {
if (output != value)
{
output = value;
PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs("Output"));
}
}
};
};
}
MainPage.xaml.h
public ref class MainPage sealed
{
public:
MainPage();
property serverclass^ Ser {
serverclass^ get() { return ser; }
void set(serverclass^ value) {
ser = value;
}
}
private:
serverclass^ ser;
void Button_Click(Platform::Object^ sender,
Windows::UI::Xaml::RoutedEventArgs^ e);
};
MainPage.xaml.cpp
MainPage::MainPage()
{
InitializeComponent();
this->ser = ref new serverclass();
ser->Output = "world";
this->DataContext = ser;
}
void DataContextSample::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
ser->Output = "hello";
}
MainPage.xaml
<StackPanel>
<TextBox Text="{x:Bind Ser.Output,Mode=TwoWay}" Width="100" Height="30" Margin="10"/>
<Button Click="Button_Click" Content="click me"/>
</StackPanel>
Комментарии:
1. Приведенный выше код просто печатает «мир», а не «Привет».
2. Начальное значение
ser->Output
равноworld
, и значение будет изменено, какhello
при нажатии кнопки, которая используется для проверки привязки TwoWay . Если вы нажмете на кнопку, а текст текстового поля не изменится, вы можете добавить точку останова в строке кодаif(output!=value)
вOutput
set()
методе свойства, чтобы посмотреть,PropertyChanged
срабатывает ли это.