WPF扩展器 - 任何时候只能扩展一个扩展器

时间:2015-10-14 12:55:04

标签: c# wpf mvvm expander

在WPF列表视图中,我创建了几个WPF扩展器,在每个扩展器中我有几个项目。现在我想每次只扩展一个扩展器...这意味着如果扩展的话,所有其他扩展器都要被扩展。你能帮忙吗?请注意,扩展器是由ItemTemplate创建的!

XMAL:

-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
{
        [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];

        // Get the current form values
        formValues = [self.form formValues];

        int i = 0;

        if ([rowDescriptor.tag hasPrefix:formField8AnnualTurnover]){
                NSString *annualTurnoverValue = [(XLFormOptionsObject*)formValues[formField8AnnualTurnover] displayText];
                rowDescriptor8AnnualTurnover.value = [NSString stringWithFormat:@"R %@", annualTurnoverValue]; //This breaks.
                [self reloadFormRow:rowDescriptor8AnnualTurnover];
            }    
}

视图模型

<UserControl x:Class="DataRetrieval.Views.ParametersView"
             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" 
                 mc:Ignorable="d" 
                  xmlns:local="clr-namespace:DataRetrieval.Views"

                  d:DesignWidth="400"  Height=" 600" Background="White">

            <UserControl.Resources>
                <DataTemplate x:Key="StringDataTemplate">

                    <StackPanel Margin="5" >
                            <TextBlock Text="{Binding Name}" />
                        <TextBox Text="{Binding SelectedValue, UpdateSourceTrigger=PropertyChanged}" Width="290" />
                    </StackPanel>

                </DataTemplate>
                <DataTemplate x:Key="DateDataTemplate">

                    <StackPanel Margin="5" >
                            <ComboBox  SelectedIndex="{Binding SelectedValue, UpdateSourceTrigger=PropertyChanged}" Text="{Binding Name}"  Width="290" ItemsSource="{Binding UserItems}"/>
                        <DatePicker SelectedDate="{Binding multitype.datetime}" Width="200"/>

                    </StackPanel>

                </DataTemplate>


                <local:ParamControlTemplateSelector x:Key="myParamTemplateSelector" />
            </UserControl.Resources>
        <Border BorderBrush="LightGray" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Margin="20"  Background="#FFF3F3F3">
            <Grid Margin="5">
                <ScrollViewer VerticalScrollBarVisibility="Auto">
                    <ListView x:Name="myListView1" ItemsSource="{Binding Qtables,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding SelectedIndex}">

                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Expander Header="{Binding Name}"  Width="320" IsExpanded="{Binding IsExpanded}" >
                                        <StackPanel   Height="600">
                                            <TextBlock Text="{Binding Name}" />
                                            <ListView x:Name="myListView" ItemsSource="{Binding Params,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemTemplateSelector="{StaticResource myParamTemplateSelector}" SelectedIndex="{Binding CurrentUser, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                                            </ListView>
                                        </StackPanel>

                                    </Expander>

                            </DataTemplate>
                    </ListView.ItemTemplate>
                   </ListView>
                </ScrollViewer>
            </Grid>
        </Border>
    </UserControl>

1 个答案:

答案 0 :(得分:0)

这可以通过更改模型来处理IsExpanded

来完成

QTables模型:

 public class QDatatables : BindableBase
    {
        public QDatatables()
        {
            List.CollectionChanged += List_CollectionChanged;
        }

        void List_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {            
            foreach (var item in e.NewItems)
            {
                var test = item as QDatatable;
                test.PropertyChanged += test_PropertyChanged;
            }            
        }

        void test_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "IsExpanded")
            {
                var cur = sender as QDatatable;
                if (cur.IsExpanded == true)
                {
                    foreach (var item in List)
                    {
                        if (item.Name != cur.Name && item.IsExpanded == true)
                        {
                            item.IsExpanded = false;
                        }
                    }    
                }

            }

        }

        private ObservableCollection<QDatatable> _list;
        public ObservableCollection<QDatatable> List
        {
            get { return _list ?? (_list=new ObservableCollection<QDatatable>()); }
            set { SetProperty(ref _list, value); }
        }



    }