0

Person データを一括で更新したい。

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

リスト m_list = 新しいリスト();

m_list のすべての Person の "Department" 属性にバインドしたい TextBox "TextBox1" コントロールがあります。

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);
}
4

2 に答える 2

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>
于 2012-07-18T18:41:16.800 に答える
0

を誤解している可能性があると思いますDataContext

WPF アプリケーションには、UI レイヤーとデータ レイヤーの 2 つのレイヤーが含まれています。はDataContextデータ レイヤーであり、コントロール ( などTextBox) は UI レイヤーです。

データをバッチで更新する場合は、データ レイヤーで更新を実行するだけです。UI レイヤーを関与させる必要はまったくありません (そこから値を取得する場合を除きます)。

たとえば、シングルがあり、すべてのプロパティを to に設定したい場合は、リストをTextBoxループして、それぞれのプロパティをに設定するだけですDepartmentPersonList<Person>TextBox.TextPersonDepartmentTextBox1.Text

foreach(Person current in m_list)
{
    current.Department = TextBox1.Text;
}
于 2012-07-18T18:45:31.210 に答える