Khushi1103 Ответов: 2

Wpf включает кнопку, когда некоторые textchange/checkchange/selecetedindex изменяются на вкладке


Привет,

Я новичок в WPF, и мне нужно создать приложение, в котором есть несколько вкладок в окне, а также есть кнопки Сохранить и сохранить все в окне. Таким образом, изменения в любом из элементов управления(например, Textbox text change или check box check changed или dropdown selected index change), кнопка Сохранить должна быть включена. При загрузке кнопка Сохранить должна быть отключена, так как при загрузке никаких изменений не происходит.

Я попробовал несколько подходов, таких как реализация InotifyPropertyChange и ICommand, но не смог этого добиться.

Может ли кто - нибудь помочь мне в этом отношении?

Ниже приведен фрагмент кода моей страницы MainWindow xaml.

Что я уже пробовал:

<Page x:Class="Example1.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Example1"
       xmlns:vm="clr-namespace:Example1.ViewModels"
        xmlns:m="clr-namespace:Example1.Models"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="MainPage">
    <Page.Resources>
        <m:Config x:Key="Config"/>
        <vm:ViewModelBase x:Key="ViewModel"/>
    </Page.Resources>
    <StackPanel>
        <Grid>
            <ToolBar x:Uid="ToolBar_1" VerticalAlignment="Top" Height="56" Background="{x:Null}" >
                <Button x:Uid="btnSaveas" x:Name="btnSaveas" Content="Save" FontWeight="Bold" Width="146" Height="36" BorderBrush="Transparent" Foreground="White" Command="{Binding simplpComm, Source={StaticResource ViewModel}}">
                    <Button.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="Black" Offset="0"/>
                            <GradientStop Color="White" Offset="1"/>
                        </LinearGradientBrush>
                    </Button.Background>
                </Button>

            </ToolBar>
            <TabControl  x:Uid="TabControl_1" FontFamily="Tahoma" FontSize="14" Grid.RowSpan="2" Margin="0,61,0,46">
                <TabItem x:Uid="tabConfig" x:Name="tabConfig" Margin="0" Loaded="tabConfig_Loaded" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                    <TabItem.Header >
                        <Label x:Name="lblConfigure" HorizontalAlignment="Stretch" Content="User"></Label>
                    </TabItem.Header>
                    <ScrollViewer CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                        <Grid x:Uid="gridProperties" x:Name="gridProperties">
                        </Grid>
                    </ScrollViewer>
                </TabItem>
            </TabControl>
        </Grid>
    </StackPanel>
</Page>

2 Ответов

Рейтинг:
9

Alex Schunk

Вам нужна ретрансляционная команда [^] реализация ICommand.

Затем вы можете инициализировать ICommand следующим образом:

this.SaveAllCommand = new RelayCommand(SaveAllAction, () => /* Any condition for enable / disable of button goes here */);

Всякий раз, когда что-то меняется, вы должны обновить кнопку:
this.SaveAllCommand.RefreshCanExecute();

Не забудьте привязать команду к кнопке
<Button Content="Save All" Command="{Binding SaveAllCommand}" />


Рейтинг:
0

Graeme_Grant

Вы используете шаблон MVVM. Пользовательский интерфейс-это только отражение состояния ViewModel и данных модели. Поэтому, когда вы смотрите на то, что вы пытаетесь сделать, не думайте в терминах того, что делают элементы управления, думайте в терминах состояния данных. Таким образом, состояние проверки, в котором проверяется состояние данных, - это то, к чему привязываются элементы управления для управления своими состояниями.

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