1

それぞれがUIType(つまり、テキストボックス、チェックボックス、コンボなど)を持つオブジェクトのリストをバインドしたい。また、オブジェクトの Value プロパティがあります。

このリストを ItemControl (ListBox、DataGrid ..) にバインドします。ここで、各アイテムには、各オブジェクトの特定の UIType に対応する個別のテンプレートがあります (たとえば、コンボのアイテムには行にコンボがあり、チェックボックスのアイテムにはチェックボックスがあります)。 ...

明らかに prop Value は、各アイテムの関連するプロパティにバインドされます。

これを達成するための最も透明で、あまり精巧ではない方法は何ですか?

シルバーライト 5.

編集: (ヤコブのソリューションに基づく作業コード)

コード:

ObservableCollection<UIType> data;

public MainPage()
{
    InitializeComponent();

    data = new ObservableCollection<UIType>() 
    { 
        new UITypeTextBox() { Value = "Value.." }, 
        new UITypeCheckBox(){ Value = true },  
    };

    lb.ItemsSource = data;
}

public class UIType { }
public class UITypeTextBox  : UIType { public object Value { get; set; }}
public class UITypeCheckBox : UIType { public object Value { get; set; } }

xaml:

<ListBox x:Name="lb">
    <ListBox.Resources>
        <DataTemplate DataType="local:UITypeTextBox">
            <TextBox Text="{Binding Value}" />
        </DataTemplate>
        <DataTemplate DataType="local:UITypeCheckBox">
            <CheckBox IsChecked="{Binding Value}" />
        </DataTemplate>
    </ListBox.Resources>
</ListBox>
4

1 に答える 1

2

Silverlight についてはよくわかりませんが、WPF ではデータ テンプレートを使用してこれを行うことができます。UI タイプごとに、データ テンプレートを定義します。このテンプレートは基本的に、XAML で定義されたユーザー コントロールであるビューにタイプをマップします。

通常、リソース ディクショナリでデータ テンプレートを定義します。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:views="clr-namespace:MyApp.Views"
    xmlns:uitypes="clr-namespace:MyApp.UITypes"
    >

    <DataTemplate DataType="{x:Type uitypes:TextBox}">
        <views:TextBoxView />
    </DataTemplate>

    <DataTemplate DataType="{x:Type uitypes:CheckBox}">
        <views:CheckBoxView />
    </DataTemplate>

</ResourceDictionary>

ビューは、UserControl から継承する XAML ファイルになります。たとえば、TextBox ビューの XAML は次のようになります。

<UserControl x:Class="MyApp.Views.TextBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    <Grid>
        <TextBox Text="{Binding Value}" />    
    </Grid>
</UserControl>

UI タイプを ItemControl に追加すると、WPF (およびできれば Silverlight) が適切なビューを自動的に選択します。

于 2012-09-28T15:30:34.080 に答える