powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / C DependencyProperty непонятно
8 сообщений из 8, страница 1 из 1
C DependencyProperty непонятно
    #39675606
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал простой контрол (типа списка) со свойством ItemsSource, куда полагаю насовывать string[] источник строк:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
	public partial class ucTagsList : UserControl
	{
		public ucTagsList()
		{
			InitializeComponent();
		}

		public string[] ItemsSource { get => (string[])GetValue(ItemsSourceProperty); set => SetValue(ItemsSourceProperty, value); }
		public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register(
			"ItemsSource", 
			typeof(string[]), 
			typeof(ucTagsList), 
			new PropertyMetadata(
				null, 
				new PropertyChangedCallback(OnItemsSourceChanged)
			)
		);
		private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
		{
				//
		}
	}



Использую:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
	class MainWindowViewModel
	{
		public MainWindowViewModel()
		{
			Tags = new string[] { "public", "static", "readonly"};
		}
		public string[] Tags { get; internal set; }
	}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<Window x:Class="TryControl.MainWindow"
...................>
	<Window.DataContext>
		<local:MainWindowViewModel />
	</Window.DataContext>
    <Grid>
		<local:ucTagsList ItemsSource="{Binding Tags}" />
	</Grid>
</Window>



Почему не вызывается OnItemsSourceChanged?
Причём, если в регистрации DependencyProperty у контрола поменять typeof(string[]) на typeof(string), то вызов происходит, но почему-то e.NewValue = "".
Пробовал List<string> - то же самое. Как поймать изменение данных?
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675623
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эм.... а я так пишу:
Код: c#
1.
new PropertyMetadata(null, OnItemsSourceChanged)

и вроде работает
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675635
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, без разницы. Это ж просто другая форма объявления того же самого.
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675637
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь кинуть готовый тестовый проект, чтобы самому его не ваять?
У меня был какой-то похожий затык, никак не могу вспомнить
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675640
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th,попробуй Itemsource заменить на Itemsource1, может из-за имени конфликтует со стандартным Itemsource .
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675641
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня всё ловится и отображается. Нужен весь проект, чтобы сказать, что тут не так.
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675653
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё работает
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp6"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
    <Grid>
        <local:MyUserControl ItemsSource="{Binding Tag}" />
    </Grid>
</Window>


Код: 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.
33.
34.
35.
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;

namespace WpfApp6
{
    public class ViewModel 
    {
        public ViewModel()
        {
            Tag = new string[3] { "One", "Two", "Three" };
        }

        public string[] Tag { set; internal get; }
    }

    public class MyUserControl : UserControl
    {
        public string[] ItemsSource
        {
            get { return (string[])GetValue(ItemsSourceProperty); }
            set { SetValue(ItemsSourceProperty, value); }
        }
        public static readonly DependencyProperty ItemsSourceProperty =
            DependencyProperty.Register("ItemsSource", typeof(string[]), typeof(MyUserControl), new PropertyMetadata(null, OnPropertyChanged));

        private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (e.NewValue is string[] arr)
            {
                Debug.Print($"Changed: {arr.Length}");
            }
        }
    }
}
...
Рейтинг: 0 / 0
C DependencyProperty непонятно
    #39675664
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, нашёл ошибку, всем спасибо.
Мелочь была.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / C DependencyProperty непонятно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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