更改 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 中。

你需要做的是

  1. 在您的实现命令中更改 MyString 的值
  2. 致电 Bindings.Update()

还有另一种方式(x:Bind之前的classic方式)

  1. 将 TextBlock 中的绑定模式更改为 OneWay
  2. 在您的 class 中实施 INotifyPropertyChanged
  3. 在您的 implementcommand 中更改 MyString 的值并引发 INotifyPropertyChanged 事件。