0
I have some problem in wpf application.

In XAML:   

     <Expander Header="SomeHeader" Style="{StaticResource ExpanderStyle}" IsExpanded="{Binding ElementName=Errors, Converter={StaticResource visibilityConverter}, Path=IsExpanded}"  >
                <RichTextBox ScrollViewer.VerticalScrollBarVisibility="Visible" Style="{StaticResource RichTextBoxStyle}" Foreground="Red" IsReadOnly="True">
                        <FlowDocument>
                            <Paragraph>
                                <ItemsControl ItemsSource="{Binding Path=Errors}">
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding}" Style="{StaticResource ErrorTextBlockStyle}"/>
                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>
                                </ItemsControl>
                            </Paragraph>
                        </FlowDocument>
                    </RichTextBox>
            </Expander>    
In my ViewModelClass:   

       private List<string> errors;
       public List<string> Errors
       {
            get { return errors; }
            set
            {
                errors = value;
                OnPropertyChanged("Errors");
            }
       }      

在构造函数中:

       public MainWindowViewModel()
       {    
           if (IsInDesignMode) return;    
           Errors = new List<string>();    
       }    

在测试方法中:

       private void TestExcute()
       {
           Errors = "Some error";    
       }

在这种情况下,wpf 窗口中不会显示错误消息。但是,如果我将构造函数中的代码更改为下一个:

      public MainWindowViewModel()
      {    
           if (IsInDesignMode) return;    
           Errors = new List<string>{"errorMessage1", "errorMessage2"};    
      }

显示:

错误消息1

错误消息2

是什么原因 ?

我有新问题。在这个 wpf 应用程序中,我还使用了 Expander 控件。如何创建自动展开打开,然后Errors.count > 0?

我创建转换器:

public class VisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture) { LoadFile loadFile = (LoadFile)value;

        if (loadingFile.ExcelErrors.Count > 0)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

LoadFile 是一个声明 Errors 属性的类。

4

1 回答 1

2

我认为你TestExcute在写问题时犯了一个错误,你的意思是写Errors.Add("some error")吗?

如果是这样,那么您ItemsControl不会对更改做出反应,因为属性没有更改Errors- 不会调用 setter。

将您的更改List<string>ObservableCollection<string>此类会通知其内容已更改,并且 UI 将对此做出反应。

于 2013-07-18T06:47:48.847 回答