更改GridView中项目的属性?

时间:2015-12-22 21:33:18

标签: xaml gridview data-binding uwp c++-cx

我有一个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类中的任何函数,如果它不在gridview内,它就像textBlock->Text = ref new String("hello");一样简单但是,因为控件在gridview内部,而implementscommand函数是在MyClass,而不是MainPage,我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

在DataTemplate的TextBlock中,将Text绑定到MyString属性,该属性(通过我看到的绑定判断)与命令存在于同一个类中。

您需要做的是

  1. 在您的implementcommand中更改MyString
  2. 的值
  3. 呼叫 Bindings.Update()
  4. 还有另一种方式(x:Bind之前的经典方式)

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