4

ObservableCollection<IRuleCondition>表示したい があります - インターフェイスは、表示したい2IRuleConditionつの異なるクラスで使用されますRuleConditionRuleConditionGroup以上RuleConditions、いずれかの条件が一致するようにグループ化されたもの、またはすべてなど。

XAML ではListView.ItemTemplateObservableCollection<IRuleCondition>. それとも、2 つの異なる を実装する必要がありObservableCollectionますか?

4

3 に答える 3

10

これがどのように機能するかの簡単な例を次に示します

これがオブジェクトの定義方法です

public interface Person
{
    string Name { get; set; }
}

public class Manager : Person
{
    public string Name { get; set; }
}

public class Employee : Person
{
    public string Name { get; set; }
    public string ManagerName { get;set;}
}

これは MainWindow のコード ビハインドです

public partial class MainWindow : Window
    {
        ObservableCollection<Person> mPeople = new ObservableCollection<Person>();

        public ObservableCollection<Person> People
        {
            get
            {
                return mPeople;
            }
        }

        public MainWindow()
        {
            DataContext = this;
            mPeople.Add( new Employee{ Name = "x" , ManagerName = "foo"});
            mPeople.Add( new Manager { Name = "y"});

            InitializeComponent();
        }
    }

これは MainWindow XAML です

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
        Title="MainWindow"
        Height="350"
        Width="525">
    <Window.Resources>
        <DataTemplate  DataType="{x:Type my:Employee}">
            <StackPanel Background="Green" Width="300">
                <TextBlock Text="{Binding Name}" />
                <TextBlock Text="{Binding ManagerName}" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate  DataType="{x:Type my:Manager}">
            <StackPanel Background="Red"
                        Width="300">
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>

    </Window.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding People}"></ListBox>
    </Grid>
</Window>

ご覧のとおり、マネージャー用と従業員用の 2 つのデータ テンプレートがあります。

ここに画像の説明を入力

そして、これはくだらない出力がどのように見えるかです。緑と赤の背景と、マネージャーと比較して従業員に表示される追加のフィールドに注目してください。

于 2013-03-29T02:57:45.817 に答える
2

Resources セクションで、RuleCondition タイプごとに 1 つずつ、2 つの異なる DataTemplate を定義するだけです。

于 2013-03-29T02:38:25.413 に答える
1

1) 2 つの異なるデータ テンプレートを作成します。これは、既に行ったと言ったとおりです。2) カスタムDataTemplateSelectorを作成して、適切なテンプレートを選択します。

コメントの 1 つは、DataTemplateSelector からエラーが発生していると述べています。クラスを正しく実装していることを確認し、おそらく実装を貼り付けます。かなり小さくて簡単なはずです。

于 2013-03-29T02:57:37.893 に答える