标签: datatemplate

194
推荐指数
5
解决办法
7万
查看次数

什么是ViewModelLocator,与DataTemplates相比有哪些优缺点?

有人可以快速总结一下ViewModelLocator是什么,它是如何工作的,以及与DataTemplates相比使用它的优缺点是什么?

我曾尝试在Google上查找信息,但似乎有许多不同的实现,并没有关于它是什么以及使用它的优点/缺点的严格列表.

wpf datatemplate mvvm mvvm-light viewmodellocator

109
推荐指数
3
解决办法
4万
查看次数

从DataTemplate访问父DataContext

我有一个ListBox绑定到ViewModel上的子集合.列表框项基于父ViewModel上的属性在datatemplate中设置样式:

<Style x:Key="curveSpeedNonConstantParameterCell">
   <Style.Triggers>
      <DataTrigger Binding="{Binding Path=DataContext.CurveSpeedMustBeSpecified, 
          ElementName=someParentElementWithReferenceToRootDataContext}" 
          Value="True">
          <Setter Property="Control.Visibility" Value="Hidden"></Setter>
      </DataTrigger>
   </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

我收到以下输出错误:

System.Windows.Data Error: 39 : BindingExpression path error: 
 'CurveSpeedMustBeSpecified' property not found on 
   'object' ''BindingListCollectionView' (HashCode=20467555)'. 
 BindingExpression:Path=DataContext.CurveSpeedMustBeSpecified; 
 DataItem='Grid' (Name='nonConstantCurveParametersGrid');
 target element is 'TextBox' (Name=''); 
 target property is 'NoTarget' (type 'Object')
Run Code Online (Sandbox Code Playgroud)

因此,如果我将绑定表达式更改为"Path=DataContext.CurrentItem.CurveSpeedMustBeSpecified"它可以工作,但只要父用户控件的datacontext是a BindingListCollectionView.这是不可接受的,因为用户控件的其余部分会自动绑定到CurrentItemon的属性BindingList.

如何在样式中指定绑定表达式,以便无论父数据上下文是集合视图还是单个项目,它都可以工作?

data-binding wpf xaml relativesource datatemplate

101
推荐指数
4
解决办法
11万
查看次数

连接字符串而不是使用TextBlocks堆栈

我想在WPF ItemsControl中显示Customer对象列表.我为此创建了一个DataTemplate:

    <DataTemplate DataType="{x:Type myNameSpace:Customer}">
        <StackPanel Orientation="Horizontal" Margin="10">
            <CheckBox"></CheckBox>
            <TextBlock Text="{Binding Path=Number}"></TextBlock>
            <TextBlock Text=" - "></TextBlock>
            <TextBlock Text="{Binding Path=Name}"></TextBlock>
        </StackPanel>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

所以我想要的基本上是一个包含NUMBER - NAME的简单列表(带复选框).有没有办法可以在绑定部分直接连接数字和名称?

.net wpf datatemplate

80
推荐指数
3
解决办法
5万
查看次数

如何在c#代码中构建DataTemplate?

我正在尝试为winform互操作构建一个下拉列表,我正在创建代码中的下拉列表.但是,我在根据我指定的DataTemplate获取要绑定的数据时遇到问题.

我错过了什么?

drpCreditCardNumberWpf = new ComboBox();  
DataTemplate cardLayout = new DataTemplate {DataType = typeof (CreditCardPayment)};   
StackPanel sp = new StackPanel
{
    Orientation = System.Windows.Controls.Orientation.Vertical
};   

TextBlock cardHolder = new TextBlock {ToolTip = "Card Holder Name"};
cardHolder.SetBinding(TextBlock.TextProperty, "BillToName");
sp.Children.Add(cardHolder);

TextBlock cardNumber = new TextBlock {ToolTip = "Credit Card Number"};
cardNumber.SetBinding(TextBlock.TextProperty, "SafeNumber");
sp.Children.Add(cardNumber);

TextBlock notes = new TextBlock {ToolTip = "Notes"};
notes.SetBinding(TextBlock.TextProperty, "Notes");
sp.Children.Add(notes);

cardLayout.Resources.Add(sp, null);

drpCreditCardNumberWpf.ItemTemplate = cardLayout;
Run Code Online (Sandbox Code Playgroud)

c# wpf datatemplate

79
推荐指数
2
解决办法
8万
查看次数

如何使WPF数据模板填充列表框的整个宽度?

我有一个ListBox DataTemplateWPF.我希望一个项目紧贴在左侧ListBox,另一个项目紧靠右侧,但我无法弄清楚如何做到这一点.

到目前为止,我有一个Grid有三列,左边和右边的列有内容,中心是占位符,宽度设置为"*".我哪里错了?

这是代码:

<DataTemplate x:Key="SmallCustomerListItem">
    <Grid HorizontalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <WrapPanel HorizontalAlignment="Stretch" Margin="0">
            <!--Some content here-->
            <TextBlock Text="{Binding Path=LastName}" TextWrapping="Wrap" FontSize="24"/>
            <TextBlock Text=", " TextWrapping="Wrap" FontSize="24"/>
            <TextBlock Text="{Binding Path=FirstName}" TextWrapping="Wrap" FontSize="24"/>

        </WrapPanel>
        <ListBox ItemsSource="{Binding Path=PhoneNumbers}" Grid.Column="2" d:DesignWidth="100" d:DesignHeight="50"
     Margin="8,0" Background="Transparent" BorderBrush="Transparent" IsHitTestVisible="False" HorizontalAlignment="Stretch"/>
    </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

wpf layout listbox datatemplate

61
推荐指数
2
解决办法
5万
查看次数

WPF列表框空datatemplate

我想知道人们如何处理没有项目的ListBox控件?例如,我想绑定搜索结果列表,但如果没有找到结果,我想显示"未找到结果".

我目前解决这个问题的方法是,如果结果集count = 0,我会隐藏列表框,并显示带有"找不到结果"消息的标签.理想情况下,我想要像ASP .NET datagrid EmptyTemplate解决方案.

干杯

.net wpf listbox datatemplate

51
推荐指数
2
解决办法
2万
查看次数

有没有办法在WPF中使用数据模板继承?

是否有可能具有DataTemplate组合或继承(类似于样式中的"BasedOn")?有两个我需要的实例.

  1. 对于继承的类:我有一个带有几个继承类的基类.我不想在每个派生类中复制基类模板DataTemplate.

  2. 不同的视图:对于同一个类,我想定义一个datatemplate,然后根据需要添加到该模板.防爆.基本模板将显示对象中的数据,然后我想要不同的模板,可以对对象执行不同的操作,同时显示数据(继承基本模板).

wpf xaml datatemplate

49
推荐指数
2
解决办法
2万
查看次数

如何让DataTemplate.DataTrigger检查大于或小于?

以下DataTemplate.DataTrigger使年龄显示为红色,如果它等于 30.

如果年龄显示大于 30,如何使年龄显示为红色?

<DataTemplate DataType="{x:Type local:Customer}">
    <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="150"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/>
        <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/>
    </Grid>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Age}">
            <DataTrigger.Value>30</DataTrigger.Value>
            <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
        </DataTrigger>
    </DataTemplate.Triggers>

</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatrigger datatemplate

44
推荐指数
3
解决办法
5万
查看次数

当ContentControl的内容为null或为空时,在ContentControl中显示默认的DataTemplate?

我认为这是可能的,但显而易见的方法是行不通的.

目前,我这样做:

<ContentControl
    Content="{Binding HurfView.EditedPart}">
    <ContentControl.Resources>
        <Style
            TargetType="ContentControl"
            x:Key="emptytemplate">
            <Style.Triggers>
                <DataTrigger
                    Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content}"
                    Value="{x:Null}">
                    <Setter
                        Property="ContentControl.Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Grid
                                    HorizontalAlignment="Stretch"
                                    VerticalAlignment="Stretch">
                                    <TextBlock>EMPTY!</TextBlock>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Resources>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

我没有得到任何绑定错误,这编译.但是,它不会产生预期的结果.我也试过了这个显而易见的事情:

<DataTemplate DataType="{x:Null}"><TextBlock>Hurf</TextBlock></DataTemplate>
Run Code Online (Sandbox Code Playgroud)

这不会编译.并且尝试两次设置内容也会失败:

<ContentControl
    Content="{Binding HurfView.EditedPart}">
        <TextBlock>DEFAULT DISPLAY</TextBlock>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

我可以不编写自定义模板选择器吗?

wpf datatemplate default-value contentcontrol

39
推荐指数
2
解决办法
2万
查看次数