powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновить все Child UI
5 сообщений из 5, страница 1 из 1
Обновить все Child UI
    #38908063
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня 2 вопроса:

1. В какой момент добавить дочерние UI на контрол. Сейчас делаю в рендер, но мне кажется неправильно.
Вообще мне нужно их добавить после биндинга модели.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        protected override void OnRender(DrawingContext context)
        {
            base.OnRender(context);

            if (!_load && Planets.Count > 0)
            {
                _aspects = new Dictionary<PlanetModel, List<AspectUI>>();
                for (int i = 0; i < Planets.Count; i++)
                {
                    List<AspectUI> list = new List<AspectUI>();
                    for (int j = 0; j < Planets.Count; j++)
                    {
                        var aspect = new AspectUI(Planets[j]);
                        list.Add(aspect);
                        this.Children.Add(aspect);
                    }
                    _aspects.Add(Planets[i], list);
                }
                _load = true;
            }
        }



2. Как мне обновить потом эти контролы
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class AspectUI : Canvas
{
    PlanetModel _planet;
    bool _show;
    Point _startPoint;
    Point _endPoint;
    Pen _pen;
    private static Action EmptyDelegate = delegate() { };

    public bool ShowAspect { get { return _show; } set { _show = value; } }

    public AspectUI(PlanetModel planet)
    {
        _planet = planet;
    }

    public void Show(Point startPoint, Point endPoint, Pen pen)
    {
        _startPoint = startPoint;
        _endPoint = endPoint;
        _pen = pen;
        //this.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
    }

    protected override void OnRender(DrawingContext context)
    {
        base.OnRender(context);

        if (_show)
                context.DrawLine(_pen, _startPoint, _endPoint);
    }
}



Метод Show вызывается из родительского метода при выполнении ряда условий.
...
Рейтинг: 0 / 0
Обновить все Child UI
    #38908456
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй ItemsControl,
используй декларативный, а не императивный подход в WPF
...
Рейтинг: 0 / 0
Обновить все Child UI
    #38908564
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Может тогда есть проще вариант.
Моя задача отобразить ToolTip у нарисованной линии. У каждой линии свой ToolTip и количество линий произвольное.
Можно ли это как-то сделать?
...
Рейтинг: 0 / 0
Обновить все Child UI
    #38908739
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavluhaRoman Mejtes,

Может тогда есть проще вариант.
Моя задача отобразить ToolTip у нарисованной линии. У каждой линии свой ToolTip и количество линий произвольное.
Можно ли это как-то сделать?
не очень понятно, как это представлено в модели представления.
в виде массива? в виде переменной? как это отобразить зависит от того как вы это представляете. Ну, а перед тем как отобразить представление (view), надо подумать о том как будет наиболее удобным способом представлено в модели.
...
Рейтинг: 0 / 0
Обновить все Child UI
    #38909393
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesне очень понятно, как это представлено в модели представления.
в виде массива? в виде переменной? как это отобразить зависит от того как вы это представляете. Ну, а перед тем как отобразить представление (view), надо подумать о том как будет наиболее удобным способом представлено в модели.


В модели есть обычный список:
Код: c#
1.
2.
   public List<PlanetModel> Planets
   public OrbModel Orbs



Для получения данных о количестве линий, надо сделать декартово произведение этого списка. Т.е. каждый с каждым.
А потом проверить связь между этими парами учитывая данные с свойства Orbs. Это таблица.

Сейчас работает так. Эти 2 свойства биндятся на контрол:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
                            <local:PlanetCircle Panel.ZIndex="2" 
                                                Radius="{Binding Path=Radius, Converter={StaticResource SizeConverter2}}" 
                                                Planets="{Binding Path=Planets}" 
                                                Orbs="{Binding Path=Orbs}" 
                                                CentreX="{Binding Path=Radius}" 
                                                CentreY="{Binding Path=Radius}" 
                                                Rotation="{Binding ElementName=icPlanets, Path=DataContext.Angle}">
                            </local:PlanetCircle>



А уже в самом контроле я делаю, то что описал выше.
По советам, которые даны сейчас, как я понял, мне надо в модели завести уже такое свойство, которое будет содержать уже этот рассчитанный список. Его потом биндить на ItemsControl какой-нибудь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновить все Child UI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]