YuS_2
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору iNNOKENTIY21 Цитата: Как это не то? Самая настоящая привязка данных... только источником элемент формы задан. И там не просто парсинг имен, там создаются полноценные переменные-объекты, которыми можно управлять и изменять данные, причем привязаны они к именам элементов уже готовой формы. А там: Цитата: А вот похоже, чего хотелось бы: Weird WPF binding in PowerShell · GitHub | Все наоборот. Создаются объекты в коде powershell и привязываются они даже не к именам элементов, а к контексту элементов... причем приходится ещё и создавать уникальные идентификаторы, чтобы их забиндить и изменять в коде. По-моему, это вообще неудобно... Для наглядности: Код: # Задаем начальные данные формы: $var1,$var2,$global:k = 'Проверочный текст','run from powershell',0 [xml]$xmlwpf = @" <Window 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:local="clr-namespace:WpfApplication2" Title="Главное окно" Height="215.061" Width="460.045" ResizeMode="NoResize" Topmost="True"> <Grid Height="188" VerticalAlignment="Top" Margin="0,0,0,-2"> <Label x:Name="label" Content="$var1" HorizontalAlignment="Left" Margin="33,0,0,0" VerticalAlignment="Top" Width="399" FontFamily="Arial" Height="30" FontSize="14" Foreground="#FF4BFF00" Background="#FF7E0C0C"/> <Label x:Name="label1" Content="$var2" HorizontalAlignment="Left" Margin="33,135,0,0" VerticalAlignment="Top" Width="219" FontFamily="Times New Roman" FontSize="10" Height="27"/> <Button x:Name="btnChange" Content="Изменить" HorizontalAlignment="Left" Margin="296,149,0,0" VerticalAlignment="Top" Width="60" Height="20" FontSize="11"/> <Button x:Name="btnExit" Content="Выход" HorizontalAlignment="Left" Margin="372,149,0,0" VerticalAlignment="Top" Width="60" Height="20" FontSize="11"/> <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="33" Margin="33,56,0,0" TextWrapping="Wrap" Text="{Binding Content, ElementName=label, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="399" FontFamily="Arial" Foreground="#FF7C2C2C"> <TextBox.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FF768D66" Offset="0"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </TextBox.Background> <TextBox.CaretBrush> <RadialGradientBrush> <GradientStop Color="Black" Offset="0"/> <GradientStop Color="White" Offset="1"/> </RadialGradientBrush> </TextBox.CaretBrush> </TextBox> <Button x:Name="btnReset" Content="Сброс" HorizontalAlignment="Left" Margin="296,120,0,0" VerticalAlignment="Top" Width="60" FontSize="11" Height="20"/> </Grid> </Window> "@ try{ add-type -assemblyname presentationcore,presentationframework,windowsbase,system.windows.forms } catch { throw "failed to load windows presentation framework assemblies." } # Загружаем форму: $global:xamgui = [windows.markup.xamlreader]::load((new-object system.xml.xmlnodereader $xmlwpf)) # Создаем переменные-объекты на все элементы формы: $xmlwpf.selectnodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | %{ set-variable -name ($_.name) -value $xamgui.findname($_.name) -scope global } # Формируем данные: $arr = gsv|select -first 10 # Создаем обработчики событий: $btnexit.add_click({ $xamgui.close() }) $btnchange.add_click({ if($k -eq 0){$label1.content = $var2} if ($k -ge $arr.length){ $label1.content = "Достигнут предел. Нажмите 'Сброс'" } else {$label.content = "$($arr[$k].name) - " + $arr[$k].status} $global:k+=1 }) $btnreset.add_click({ $global:k=0 }) $xamgui.showdialog() | out-null | Label и TextBox взаимосвязаны, текстовое поле - редактируемое. Добавлено: iNNOKENTIY21 Цитата: Что то нашлось: Data Binding and INotifyPropertyChanged | А-а-а, вон чего надо... теперь понял, но это уже завтра, на сегодня уже лимит желания и возможностей извилин, исчерпан | Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:39 09-09-2019 | Исправлено: YuS_2, 23:44 09-09-2019 |
|