ユーザーコントロールにプロパティとして渡すオブジェクトがあります。次に、オブジェクト プロパティをループ処理し、注文日に基づいて異なるタブで実行時にコントロールを作成します。添付の画像をよく読んで理解を深めてください。
正常に動作しますが、これは WINFORM タイプであるため、WPF バインディング、依存関係プロパティなどを使用して実行時にコントロールを作成することは何とか可能です。
ありがとう
ユーザーコントロールにプロパティとして渡すオブジェクトがあります。次に、オブジェクト プロパティをループ処理し、注文日に基づいて異なるタブで実行時にコントロールを作成します。添付の画像をよく読んで理解を深めてください。
正常に動作しますが、これは WINFORM タイプであるため、WPF バインディング、依存関係プロパティなどを使用して実行時にコントロールを作成することは何とか可能です。
ありがとう
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>