wpf как получить значение из учебника в ControlTemplate treeivwitem - PullRequest
0 голосов
/ 16 ноября 2018

как получить значение txt_add .text?этот стиль применяется к TreeViewitem в коде

<Page.Resources>
    <Style TargetType="{x:Type TreeViewItem}" x:Key="add" >
        <Setter Property="Background" Value="{DynamicResource WhiteBrush}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem" >
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBox Width="300" Controls:TextBoxHelper.Watermark="Account Name" Margin="2" x:Name="txt_add"/>
                        <Button Content="{x:Static lang:ResLang.insert}" Style="{StaticResource ButtonSystem}" Width="100" Margin="2" Click="Button_AddNewSubOk_Click"/>
                        <Button Content="{x:Static lang:ResLang.btn_cancel}" Style="{StaticResource ButtonCancel }" Width="100" Margin="2" Click="Button_AddNewSubCancel_Click"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>
</Page>

1 Ответ

0 голосов
/ 17 ноября 2018

Вам необходимо привязать его с помощью шаблона mvvm, создать класс viewmodel, который наследует inotifypropertychanged, а затем привязать ваш текст к свойству этого класса.

<Window.DataContext>
    <model:viewmodel x:Key="viewmodel"/>
</Window.DataContext>
<!-- where ever you got your textbox -->
<TextBox Text="{Binding Mode=TwoWay,Source={StaticResource viewmodel},Path=stringproperty"/>  

и простой класс viewmodel:

public class viewmodel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        public String stringproperty{ get; set; } ;
    }  

есть простая реализация "свойства изменена" в сети, если это не работает для вас.
и вы можете получить к нему доступкак это, но это неправильно, вы не должны делать это

(this.DataContext as viewmodel).stringproperty

после привязки, используйте только привязки для доступа к вашим данным, если они нужны вам в некоторых действиях или событиях, передаваемых в качестве параметра «команде», которую вы можете искатьоб этом

...