2013-07-18 24 views
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"); 
      } 
     }  

在構造函數中:WPF自動展開,則錯誤不行

 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"};  
     } 

顯示:

errorMessage1

errorMessage2

的原因是什麼?

我有新問題。在這個wpf應用程序中,我也使用了Expander控件。如何創建自動展開,然後Errors.count> 0?

創建轉換器:

公共類VisibilityConverter:的IValueConverter { 公共對象轉換(對象的值,類型TARGETTYPE, 對象參數,System.Globalization.CultureInfo培養) { 的LoadFile的loadFile =(的LoadFile)值;

 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屬性的類。

回答

2

我認爲你在寫你的意思寫Errors.Add("some error")時寫錯了你的TestExcute

如果是這樣,那麼你的ItemsControl不會改變,因爲沒有改變屬性Errors - setter不會被調用。

將您的List<string>更改爲ObservableCollection<string>此課程通知其內容有變化,UI將對此做出反應。

+0

拉法爾,非常感謝你,我想也是 – user2588686