Использование свойства объекта как ресурс
Я хотел бы использовать массив строк как ItemsSource для выпадающего списка. Поскольку объявить массив вне класса нельзя, я создал класс TestClass с единственным свойством Value, которое возвращает массив строк
public class TestClass
{
public string[] Values
{
get { return new string[] { "one", "two", "three" }; }
}
}
Далее я добавил TestClass как статический ресурс, но не знаю как указать Values в качестве источника данных
<Grid>
<Grid.Resources>
<local:TestClass x:Key="TestClass"/>
</Grid.Resources>
<ComboBox ItemsSource="{Binding Source={StaticResource TestClass}}" />
</Grid>
Пробовал объявить TestClass.Values как отдельный ресурс
<Grid.Resources>
<local:TestClass x:Key="TestClass"/>
<local:TestClass.Values x:Key="TestValues"/>
</Grid.Resources>
Ошибка: В типе TestClass не удалось найти присоединенное свойство Values.
Пробовал обратиться к свойству Values при привязке
<ComboBox ItemsSource="{Binding Source={StaticResource TestClass.Values}}" />
Ошибка: Не удалось разрешить ресурс TestClass.Values
Ответы (1 шт):
Просто укажите путь при создании привязки:
<ComboBox ItemsSource="{Binding Path=Values, Source={StaticResource TestClass}}" />
Так же, виду того, что у Binding есть перегрузка конструктора с параметром Path, эту запись можно немного укоротить:
<ComboBox ItemsSource="{Binding Values, Source={StaticResource TestClass}}" />
Ну и обычно, все же, бизнес-данные размещают внутри вью-моделей, а саму вью-модель помещают в DataContext окна или контрола, при этом, если в привязке не указывать Source, по умолчанию она выполняется как раз к DataContext, в этом случае привязка будет выглядеть ещё короче:
<ComboBox ItemsSource="{Binding Values}" />