Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Как в ListviewItem встроить lookup combobox  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
У Listview есть свой ItemSource в виде коллекции классов, которая имеет свойство-внешний ключ на некоторую другую коллекцию (статическую) классов. Как сделать так, чтобы внутри каждого айтема я мог выбирать деталь из второй коллекции. Получается, что у ComboBox'а уже другой ItemSource будет.
Если я сделаю свой userControl с ComboBox, заполнив данными из детальной (статической) коллекции и в selectedChanged буду получать id выбранного значения и подставлять в соответствующий элемент мастер-коллекции это нормальный подход? Наверняка есть более цивилизованные способы решения этого вопроса?
Заранее вбить в ComboBox значения не вариант.

К сообщению приложен файл. Размер - 12Kb
25 сен 18, 16:26    [21685662]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
vb_sub
Member

Откуда:
Сообщений: 495
Евгений, Екатеринбург,
не знаю насколько точно это по твоему вопросу, но вроде похожая проблема у меня была
ссылка
25 сен 18, 16:38    [21685690]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
DataTemplate для ListViewItem'а, внутри DataTemplate - ComboBox, у которого ItemsSource ссылается на что нужно.
25 сен 18, 17:51    [21685798]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
Сон Веры Павловны
DataTemplate для ListViewItem'а, внутри DataTemplate - ComboBox, у которого ItemsSource ссылается на что нужно.

Спасибо. Я так хотел попробовать. Но у меня не получилось достучаться из кода до ComboBox'а расположенного внутри DataTemplate по имени ни ComboBox'а, ни DataTemplate.
<DataTemplate x:Key="ParameterTemplate" x:Name="MyTemplate">
...
      <ComboBox x:Name="cbForceParamKind" ItemsSource="{Binding Path=ForceParamKinds}" ItemTemplate="{StaticResource cbTemplate}" SelectedIndex="0">
      </ComboBox>
...
</DataTemplate>

Как правильно обратиться к такому элементу, чтобы в динамике присвоить ему ItemSource?
26 сен 18, 05:07    [21686148]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Евгений, Екатеринбург
Сон Веры Павловны
DataTemplate для ListViewItem'а, внутри DataTemplate - ComboBox, у которого ItemsSource ссылается на что нужно.

Спасибо. Я так хотел попробовать. Но у меня не получилось достучаться из кода до ComboBox'а расположенного внутри DataTemplate по имени ни ComboBox'а, ни DataTemplate.
<DataTemplate x:Key="ParameterTemplate" x:Name="MyTemplate">
...
      <ComboBox x:Name="cbForceParamKind" ItemsSource="{Binding Path=ForceParamKinds}" ItemTemplate="{StaticResource cbTemplate}" SelectedIndex="0">
      </ComboBox>
...
</DataTemplate>

Как правильно обратиться к такому элементу, чтобы в динамике присвоить ему ItemSource?

До комбобокса в темплете достукиваться не надо. Это в WPF не принято, и делается в самых крайних, и очень оргинальных случаях. Забудьте про доступ к контролам напрямую из прикладного кода. Вообще забудьте. В вашем случае ItemsSource у ComboBox'а в дататемплейте должен изменяться в модели, где определено свойство ForceParamKinds.
26 сен 18, 06:01    [21686160]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
Сон Веры Павловны
В вашем случае ItemsSource у ComboBox'а в дататемплейте должен изменяться в модели, где определено свойство ForceParamKinds.

Спасибо!
Если у меня коллекция определена статически в пространстве имен
namespace RDBLL.Common.Service
{
    public class ProgrammSettings
    {
       ...
        public static List<ForceParamKind> ForceParamKinds { get; set; } 
       ...
    }
}

то я прописываю в модели
xmlns:Setting="clr-namespace:RDBLL.Common.Service;assembly=BLL"
...
<Setting:ProgrammSettings x:Key="MySetting"/>...
...
<DataTemplate  x:Key="cbTemplate">
    <TextBlock Text="{Binding Path=Label}"></TextBlock>
</DataTemplate>
...
<ComboBox ItemsSource="{Binding Source={StaticResource MySetting.ForceParamKinds}}" ItemTemplate="{StaticResource cbTemplate}" SelectedIndex="0">
</ComboBox>

Но так не работает - отображается пустой список в комбобоксе. Как правильно заполнить?
26 сен 18, 09:30    [21686269]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Евгений, Екатеринбург
Но так не работает - отображается пустой список в комбобоксе. Как правильно заполнить?

Лично у меня это даже не запускается - вылетает при старте с ошибкой Resource MySetting.ForceParamKinds notfound.
Причина: вы ссылаетесь на ресурс MySetting, который является экземпляром класса ProgrammSettings. Этот экземпляр создается при первом обращении к статическому ресурсу MySetting. А далее вот здесь
Binding Source={StaticResource MySetting.ForceParamKinds}

вы пытаетесь через экземпляр обратиться к статическому свойству класса, что в C# запрещено. Но поскольку биндиги в C# работают через рефлекшн, то они просто не находят нужного инстансного свойства, и из-за этого вылетает ошибка, что ресурс не найден.
А нужно использовать не StaticResourceExtension, а просто StaticExtension:
<ComboBox ItemsSource="{Binding Source={x:Static Setting:ProgrammSettings.ForceParamKinds}}"
26 сен 18, 10:00    [21686315]     Ответить | Цитировать Сообщить модератору
 Re: Как в ListviewItem встроить lookup combobox  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
Сон Веры Павловны
А нужно использовать не StaticResourceExtension, а просто StaticExtension:
<ComboBox ItemsSource="{Binding Source={x:Static Setting:ProgrammSettings.ForceParamKinds}}"

Супер! - спасибо, теперь все работает. Где можно почитать про разницу?
автор
А нужно использовать не StaticResourceExtension, а просто StaticExtension:
26 сен 18, 10:17    [21686343]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить