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