Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Binding к this[enum] свойству экземпляра класса

#c_sharp #wpf #xaml #binding

                    
Есть enum

namespace namespace1.namespace2{
  enum PropertyObject 
  {
    A=1,
    B=2,
    ...
  }
}


и класс совершенно в другом namespace

public class MyClass
{
  public Object this[namespace1.namespace2.PropertyObject property]
  {
    get
    {
      return ...;
    }
  }
}


Список экземпляров всунут в ItemsSource ListView, есть также DataTemplate забитый
как ItemTemplate у ListView


  



я уверен, что данный PropertyObject у экземпяров установлен, однако пишет, что не
может достучаться до этого свойства, как создать валидный Binding к этим свойствам?

ошибка: System.Windows.Data Error: 40 : BindingExpression path error: '[]' property
not found on 'object' ''MyClass' (HashCode=55693485)'. BindingExpression:Path=this[namespace1.namespace2.PropertyObject.A];
DataItem='MyClass' (HashCode=55693485); target element is 'TextBlock' (Name=''); target
property is 'Text' (type 'String')
    


Ответы

Ответ 1



Вы используете неверный синтаксис для получения значения перечисления. В рамках XAML пространства имён в сборках (namespace в C#) и пространства имён в XML (xmlns в XML) задаются в шапке файла. При этом даже указание точного типа может не понадобиться: XAML достаточно умный, чтобы приобразовать строку к перечислению самостоятельно. Понятия "this" в биндингах тоже нет. Скорее всего, вам нужен или текущий контекст (Path='.' или просто Path=''), или текущий элемент (RelativeSource='{RelativeSource Self}' и прочие). Положим, у нас есть следующий код: namespace HakunaMatata { public partial class MainWindow { public MainWindow () { InitializeComponent(); DataContext = new Model(); } } public class Model { public string this [Other.Property prop] => prop.ToString() + " from Indexer"; } } namespace Other { public enum Property { Foo, Bar, } } Тогда все из способов обращения к индексатору будут работать корректно:

Ответ 2



Синтаксис Binding.Path - есть примеры разных привязок.

Комментариев нет:

Отправить комментарий