#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 - есть примеры разных привязок.
Комментариев нет:
Отправить комментарий