2012-07-18 31 views
0

我想批量更新個人數據。如何將TextBox綁定到多個數據上下文

public class Person 
{ 
    public long personID { get; set; } 
    public long FirstName { get; set; } 
    public long LastName { get; set; } 
    public long Department { get; set; } 
} 

List m_list = new List();

我有一個TextBox「TextBox1」控件,我想綁定到m_list的每個Person的「Department」屬性。

foreach(Person current in m_list) 
{ 
    //string bindingPath = "Department"; 
    //Binding binding = new Binding(bindingPath); 
    //binding.Mode = BindingMode.TwoWay; 
    //binding.Source = current; 
    //TextBox1.SetBinding(TextBox1.Text, binding); 
} 
+1

爲什麼要將多個Departments綁定到TextBox中?如果它只能顯示一個?我不明白意圖的用法,你能澄清你的意圖嗎? – 2012-07-18 17:49:47

+1

我不認爲我明白這一點。這聽起來像你想要將來自多個'Person'對象的'Department'屬性綁定到一個文本框?你如何設想使用雙向綁定? – Nathan 2012-07-18 18:09:39

回答

0

很容易在你的視圖模型做這樣的事情:

public class MainViewModel 
    { 
     private readonly Lazy<ObservableCollection<Person>> _people = new Lazy<ObservableCollection<Person>>(
      () => 
       { 
        return new ObservableCollection<Person> 
          { 
           new Person {Department = "Dept1", FirstName = "Person", LastName = "1"}, 
           new Person {Department = "Dept2", FirstName = "Person", LastName = "2"}, 
          }; 
       }); 
     public ObservableCollection<Person> People { get { return _people.Value; } } 

     public string Department 
     { 
      set 
      { 
       foreach (var p in People) 
        p.Department = value; 
      } 
     } 
    } 

樣品XAML:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <TextBox Grid.Column="0" Text="{Binding Department, UpdateSourceTrigger=PropertyChanged}" /> 
     <ListView ItemsSource="{Binding People}" Grid.Column="1"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Vertical" Margin="0,0,0,15"> 
         <TextBlock Text="{Binding Department}"/> 
         <TextBlock> 
          <TextBlock.Text> 
           <MultiBinding StringFormat="{}{0} {1}"> 
            <Binding Path="FirstName"/> 
            <Binding Path="LastName"/> 
           </MultiBinding> 
          </TextBlock.Text> 
         </TextBlock> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </Grid> 
0

我想你可能誤解了DataContext

WPF應用程序包含兩個層:UI層和數據層。 DataContext是數據層,而您的控件(例如TextBox)是UI層。

如果要批量更新數據,只需在數據層中執行更新即可。你根本不需要涉及UI層(除非你從中獲得價值)。

舉例來說,如果你有一個TextBox,你想通過你的Person列表設置每PersonDepartment財產在List<Person>TextBox.Text,然後簡單地循環,並設置每一個TextBox1.Text

Department財產
foreach(Person current in m_list) 
{ 
    current.Department = TextBox1.Text; 
} 
相關問題