0

ユーザーコントロールにプロパティとして渡すオブジェクトがあります。次に、オブジェクト プロパティをループ処理し、注文日に基づいて異なるタブで実行時にコントロールを作成します。添付の画像をよく読んで理解を深めてください。

正常に動作しますが、これは WINFORM タイプであるため、WPF バインディング、依存関係プロパティなどを使用して実行時にコントロールを作成することは何とか可能です。

ここに画像の説明を入力

ここに画像の説明を入力

ありがとう

4

1 に答える 1

0

WPFバインディングを使用して実行時にコントロールを作成することは何とか可能ですか

はい、可能です。これがデータ テンプレートの目的です。基本的なルールは次のとおりです:コントロールを作成せず、データを作成し、そのデータの表現方法を定義するテンプレートを表示します。

public class ComponentViewModel : ViewModel /* ViewModel is a basic implementation of INotifyPropertyChanged interface */
{
    public ComponentViewModel()
    {
        this.Items = new ObservableCollection<ItemViewModel>
        {
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Lemons" },
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Melons" },
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Apples" },
        };
    }

    public ObservableCollection<ItemViewModel> Items { get; private set; }
}

public class ItemViewModel : ViewModel
{
    public bool IsActive
    {
        get { return isActive; }
        set
        {
            if (isActive != value)
            {
                isActive = value;
                OnPropertyChanged("IsActive");
            }
        }
    }
    private bool isActive;

    public string Name
    {
        get { return name; }
        set
        {
            if (name != value)
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
    }
    private string name;

    public DateTime DateTime
    {
        get { return dateTime; }
        set
        {
            if (dateTime != value)
            {
                dateTime = value;
                OnPropertyChanged("DateTime");
            }
        }
    }
    private DateTime dateTime;
}

分離コード:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ComponentViewModel();
    }
}

XAML:

                <CheckBox Grid.Column="0" IsChecked="{Binding IsActive}" Content="{Binding Name}"/>
                <TextBox Grid.Column="1" Text="{Binding DateTime}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

于 2013-01-17T07:05:30.020 に答える