更改 GridView 中某个项目的 属性?
Change property of an item inside a GridView?
我有一个 GridView,带有此项目模板 (XAML):
<DataTemplate x:DataType="local:MyClass">
<TextBlock Text="{x:Bind MyString}"/>
<Button Command="{x:Bind command}"/>
</DataTemplate>
这里是 MyClass
(C++/CX)
public ref class MyClass sealed
{
public:
MyClass();
property Platform::String^ MyString
{
String^ get()
{
return mystring;
}
}
property ICommand^ command = ref new DelegateCommand(ref new ExecuteDelegate(this, &implementcommand), nullptr);
private:
String^ mystring;
void implementcommand(Platform::Object^ param);
}
DelegateCommand
函数是从这个示例中提取的,没有修改:https://code.msdn.microsoft.com/windowsapps/Command-binding-inside-3cef5eea
现在,如果我单击 gridview 中的任何按钮,它将调用 implementcommand
。但是,我想让 implementcommand
对 TextBlock 控件做一些事情,例如更改文本的内容。从 mainpage
class 内的任何函数,如果它不在 gridview 内,它会像 textBlock->Text = ref new String("hello");
一样简单但是,由于控件在 gridview 内,并且 implementcommand函数在 MyClass
,而不是 MainPage
,我不知道该怎么做。
在您的 DataTemplate 的 TextBlock 中,您将文本绑定到 MyString 属性,它(根据我看到的绑定判断)与命令存在于相同的 class 中。
你需要做的是
- 在您的实现命令中更改 MyString 的值
- 致电
Bindings.Update()
还有另一种方式(x:Bind之前的classic方式)
- 将 TextBlock 中的绑定模式更改为 OneWay
- 在您的 class 中实施 INotifyPropertyChanged
- 在您的 implementcommand 中更改 MyString 的值并引发 INotifyPropertyChanged 事件。
我有一个 GridView,带有此项目模板 (XAML):
<DataTemplate x:DataType="local:MyClass">
<TextBlock Text="{x:Bind MyString}"/>
<Button Command="{x:Bind command}"/>
</DataTemplate>
这里是 MyClass
(C++/CX)
public ref class MyClass sealed
{
public:
MyClass();
property Platform::String^ MyString
{
String^ get()
{
return mystring;
}
}
property ICommand^ command = ref new DelegateCommand(ref new ExecuteDelegate(this, &implementcommand), nullptr);
private:
String^ mystring;
void implementcommand(Platform::Object^ param);
}
DelegateCommand
函数是从这个示例中提取的,没有修改:https://code.msdn.microsoft.com/windowsapps/Command-binding-inside-3cef5eea
现在,如果我单击 gridview 中的任何按钮,它将调用 implementcommand
。但是,我想让 implementcommand
对 TextBlock 控件做一些事情,例如更改文本的内容。从 mainpage
class 内的任何函数,如果它不在 gridview 内,它会像 textBlock->Text = ref new String("hello");
一样简单但是,由于控件在 gridview 内,并且 implementcommand函数在 MyClass
,而不是 MainPage
,我不知道该怎么做。
在您的 DataTemplate 的 TextBlock 中,您将文本绑定到 MyString 属性,它(根据我看到的绑定判断)与命令存在于相同的 class 中。
你需要做的是
- 在您的实现命令中更改 MyString 的值
- 致电 Bindings.Update()
还有另一种方式(x:Bind之前的classic方式)
- 将 TextBlock 中的绑定模式更改为 OneWay
- 在您的 class 中实施 INotifyPropertyChanged
- 在您的 implementcommand 中更改 MyString 的值并引发 INotifyPropertyChanged 事件。