Как сделать ListBox. Допускающий повторное использование/универсальный ItemTemplate

SELECT
    table_A.Unit,
    ISNULL(Table_B.Value1, table_A.Value1) AS [Value1],
    ISNULL(Table_B.Value2, table_A.Value2) AS [Value2],
    etc ..
FROM table_A
LEFT OUTER JOIN Table_B ON Table_B.Unit = Table_A.Unit

Как насчет этого?

15
задан ASh 6 October 2018 в 09:49
поделиться

3 ответа

Самый легкий путь состоит в том, чтобы, вероятно, поместить DataTemplate как ресурс где-нибудь в Вашем приложении с a TargetType из MyDataItem как это

<DataTemplate DataType="{x:Type MyDataItem}">
    <CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>

Необходимо будет, вероятно, также включать xmlns к Вашему локальному блоку и ссылке это через это. Затем каждый раз, когда Вы используете a ListBox (или что-либо еще, что использует a MyDataItem в a ContentPresenter или ItemsPresenter) это будет использовать это DataTemplate отобразить его.

16
ответ дан 1 December 2019 в 01:24
поделиться

Создайте свой DataTemplate как ресурс и затем сошлитесь на него с помощью свойства ItemTemplate ListBox. MSDN имеет хороший пример

<Windows.Resources>
  <DataTemplate x:Key="yourTemplate">
    <CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
  </DataTemplate>
...
</Windows.Resources>

...
<ListBox Name="listBox1"
         ItemTemplate="{StaticResource yourTemplate}"/>
18
ответ дан 1 December 2019 в 01:24
поделиться

Если бы Вы хотели один путь дисплей затем, то Вы могли бы использовать преобразователь:

class ListConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ((IList<MyDataItem>)value).Select(i => new { Checked = i.Checked2, DisplayName = i.DisplayName2 });
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Затем xaml выглядел бы примерно так:

<Window.Resources>
    <this:ListConverter x:Key="ListConverter" />
</Window.Resources>
<ListBox ItemsSource="{Binding Path=Items, Converter={StaticResource ListConverter}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding Path=Checked, Mode=OneWay}" Content="{Binding Path=DisplayName, Mode=OneWay}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Тот шаблон данных Вы могли сделать универсальным как вышеупомянутый. Два способа связать были бы немного более трудными.

Я думаю, что Вы - более обеспеченное создание Вашей реализации базовых классов интерфейс ICheckedItem, который выставляет универсальные свойства, с которыми Вы хотите, чтобы datatemplates связал?

2
ответ дан 1 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: