Привязка данных в пользовательском контроле - PullRequest
1 голос
/ 10 августа 2010

Я разрабатываю пользовательский элемент управления.

Следующие коды написаны в generic.xaml

<Style TargetType="local:TwoListBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:TwoListBox">
                    <StackPanel Orientation="Horizontal">
                        <ListBox x:name="ListBoxForBasic" ItemsSource="{Binding}" DisplayMemberPath="NumValue" Margin="10"/>
                        <ListBox x:name="ListBoxForSorting" ItemsSource="{Binding}" DisplayMemberPath="NumValue" Margin="10"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Это очень просто, у меня есть два ListBox и я пытаюсь привязать следующие данные к двумListBox

public class SampleData
    {
        public int Num { get; set; }
        public int NumValue { get; set; }
    }

    public class SampleDataList : List<SampleData>
    {
        public SampleDataList()
        {
            Add(new SampleData{ Num=1, NumValue=10});
            Add(new SampleData { Num = 2, NumValue = 50 });
            Add(new SampleData { Num = 3, NumValue = 20 });
            Add(new SampleData { Num = 4, NumValue = 40 });
            Add(new SampleData { Num = 5, NumValue = 30 });
        }
    }

В MainPage.xaml я использовал пример данных для пользовательского элемента управления TwoListBox, например:

<local:TwoListBox DataContext="{StaticResource sampleData}"/>

Если нажать F5, пользовательский элемент управления TwoListBox выглядит следующим образом:

10 1050 5020 2040 4030 30

Однако я хотел бы связать отсортированные данные для второго ListBox (ListBoxForSorting) следующим образом:

10 1050 2020 3040 4030 50

В таком случае, что мне делать для этого?

Заранее спасибо

1 Ответ

0 голосов
/ 10 августа 2010
public SampleDataList() 
{ 
    Add(new SampleData{ Num=10, NumValue=10}); 
    Add(new SampleData { Num = 20, NumValue = 50 }); 
    Add(new SampleData { Num = 30, NumValue = 20 }); 
    Add(new SampleData { Num = 40, NumValue = 40 }); 
    Add(new SampleData { Num = 50, NumValue = 30 }); 
}

<ListBox x:name="ListBoxForBasic" ItemsSource="{Binding}" DisplayMemberPath="NumValue" Margin="10"/>     
<ListBox x:name="ListBoxForSorting" ItemsSource="{Binding}" DisplayMemberPath="Num" Margin="10"/>  

UPDATE: ItemsSource связан с IEnumerable, поэтому вы не можете установить порядок по выражению или что-то еще, поэтому вы должны создать какое-то свойство, например

public SampleDataList GetSortedData() 
{ 
    get { return sampleData.OrderBy(s => s.NumValue); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...