2011-03-03 112 views
0

大家好,我有這個代碼的問題,請幫助我..複選框WPF MVVM

我有看法

<StackPanel Orientation="Horizontal" Margin="3"> 
      <Label Content="Audit Type" MinWidth="100"/> 
      <Label Content=":"/> 
      <StackPanel Orientation="Vertical"> 
       <ListBox ItemsSource="{Binding Items}" Margin="3" SelectionMode="Extended" MinWidth="180"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <CheckBox Name="check" Content="{Binding Value}" IsChecked="{Binding IsChecked, Mode=TwoWay}" Margin="3" VerticalAlignment="Center"/> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </StackPanel> 
     </StackPanel> 

和視圖模型

private List<AuditTypeExport> _items; 
private List<string> _value; 
private bool _isChecked; 

public bool IsChecked 
    { 
     get { return _isChecked; } 
     set 
     { 
      _isChecked = value; 
      OnPropertyChanged("IsChecked"); 
     } 
    } 

    public List<AuditTypeExport> Items 
    { 
     get { return _items; } 
    } 

    public List<string> Value 
    { 
     get { return _value; } 
     set 
     { 
      _value = value; 
      OnPropertyChanged("Value"); 
     } 
    } 

而且視圖模型Constractor

_items = _model.GetAuditType(); 
_value = _model.GetAuditType().Select(item => item.Name).ToList(); 

對於您的信息離子

public class AuditTypeExport 
{ 
    private int _id; 
    private string _name; 

    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Name { get; set; } 

結果:複選框出現,但內容沒有,我不知道爲什麼。

問題2:我想讓價值回來,我該怎麼做?

謝謝

+0

您不需要_value字段/ Value屬性。您應該綁定到AuditExporType的名稱屬性。我沒有看到兩者如何保持同步,或者ListBox如何知道如何協調Items集合和Value集合。 – 2011-03-03 06:22:14

+1

你應該考慮改變你的標籤爲文本塊 - 它們更輕量級 – 2011-03-03 06:34:11

回答

0

目前還不清楚你如何使用你的ViewModel。這是綁定到形式?或列表框中的每個項目?

它看起來像你的ListBox綁定到你的VM的Items集合,所以ItemTemplate將與AuditTypeExport一起用作數據上下文。您綁定了AuditTypeExport類中不存在的「Value」和「IsChecked」屬性。

+0

我是MVVM中的新手,所以我很困惑。只是從別人的代碼,並嘗試它。從mycode中,它假設ItemTemplate獲取List ,從ViewModel獲取Value> AuditTypeExport.Name,並從用戶獲取IsChecked獲取它。是對的嗎 ? – aeruL 2011-03-03 07:23:25

+0

這不是一個可以簡單回答的問題。您需要正確學習MVVM。 – Foole 2011-03-03 10:05:27

0

你正在嘗試做的,是結合List<String> Value類型來CheckBoxContent財產是Object類型的屬性。

爲了簡化,您將字符串集合分配給字符串。這不是一件好事。這就是爲什麼它不起作用。

嘗試使用ItemsControl顯示Value屬性或使用IValueConverterList<String>轉換爲逗號分隔的字符串。