Есть 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')
Ответ
Вы используете неверный синтаксис для получения значения перечисления. В рамках 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,
}
}
Тогда все из способов обращения к индексатору будут работать корректно: