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
Как насчет этого?
Самый легкий путь состоит в том, чтобы, вероятно, поместить 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
отобразить его.
Создайте свой 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}"/>
Если бы Вы хотели один путь дисплей затем, то Вы могли бы использовать преобразователь:
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 связал?