相关疑难解决方法(0)

为什么在MultiBinding中转换值时会得到DependencyProperty.UnsetValue?

我有一个非常简单的IMultiValueConverter,它只是OR的两个值.在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值.

<MultiBinding Converter="{StaticResource multiBoolToVis}">
    <Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
    <Binding Path="ConditionB"/>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)

和逆变器:

public class BoolInverterConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            return !((bool)value);
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

当我包含boolInverter时,MultiValueConverter中的第一个值变为"DependencyProperty.UnsetValue".当我不使用转换器时没有问题(当然,除了我不是针对的逻辑).

我错过了什么吗?单步执行调试器会显示InverseBoolConverter正在反转我传递的值,但该值不会被"发送"到MultiValueConverter.

c# wpf xaml dependency-properties ivalueconverter

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

DataGridTemplateColumn:在使用ItemsSource之前,Items集合必须为空.

为什么是错误代码:

        <dg:DataGrid  Name="dataGrid" AutoGenerateColumns="False"                                  
                HeadersVisibility="Column" SelectedIndex="-1" Margin="0,315,0,0" Background="#FF484040" BorderBrush="#FF484040">
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn Binding="{Binding IdBook}" Header="IdBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding NameBook}" Header="NameBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Author}" Header="Author"></dg:DataGridTextColumn>
        </dg:DataGrid.Columns>

        <dg:DataGridTemplateColumn Header="Delete">

            <dg:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Style="{DynamicResource GlassButton}" Background="{DynamicResource DeleteButton}">

                    </Button>
                </DataTemplate>
            </dg:DataGridTemplateColumn.CellTemplate>

            </dg:DataGridTemplateColumn>
    </dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)

以下代码是正确的:

        <dg:DataGrid  Name="dataGrid" AutoGenerateColumns="False"                                  
                HeadersVisibility="Column" SelectedIndex="-1" Margin="0,315,0,0" Background="#FF484040" BorderBrush="#FF484040">
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn Binding="{Binding IdBook}" Header="IdBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding NameBook}" Header="NameBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Author}" Header="Author"></dg:DataGridTextColumn>
        </dg:DataGrid.Columns>

    </dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)

但我无法添加按钮到datagrid

wpf binding datagrid datagridtemplatecolumn

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

错误:在使用ItemsSource之前,项集合必须为空

我的xaml文件

<ListBox Height="522" HorizontalAlignment="Left" Margin="20,162,0,0" Name="listBox1" VerticalAlignment="Top" Width="448" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Text}" Foreground="#FFC8AB14" FontSize="36" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

xaml.cs文件

       listBox1.Items.Clear();
       for (int i = 0; i < tasks.Count(); i++) {
            List<Taskonlistbox> dataSource = new List<Taskonlistbox>();
            dataSource.Add(new Taskonlistbox() {Text = "Blalalalala"} );
            this.listBox1.ItemsSource = dataSource; // visual stdio shows error here:
        }
Run Code Online (Sandbox Code Playgroud)

Taskonlistbox:

public class Taskonlistbox
{
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

错误:"在使用ItemsSource之前,项目集合必须为空""是什么问题?

c# visual-studio windows-phone-7

8
推荐指数
1
解决办法
3万
查看次数

为什么WrapPanel水平包装TextBlocks但垂直包装UserControls?

正确地水平包装TextBlocks:

<StackPanel DockPanel.Dock="Top" Margin="10" HorizontalAlignment="Left">
    <TextBlock Text="Simple WrapPanel:" Margin="0 0 0 5"/>
    <WrapPanel Orientation="Horizontal">
        <TextBlock Text="one"/>
        <TextBlock Text="two"/>
        <TextBlock Text="thee"/>
        <TextBlock Text="four"/>
    </WrapPanel>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

但这不正确地将我的UserControls垂直堆叠在一起(我希望它们像上面的TextBlocks一样水平包装):

<StackPanel DockPanel.Dock="Top" Margin="10" HorizontalAlignment="Left">
    <TextBlock Text="Simple WrapPanel:" Margin="0 0 0 5"/>
    <WrapPanel Orientation="Horizontal">
        <ItemsControl ItemsSource="{Binding CustomerViewModels}" Width="Auto" BorderThickness="0">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <views:CustomerSimpleItemView />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </WrapPanel>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

CustomerSimpleItemView:

<UserControl x:Class="TestMvvmExample2341.Views.CustomerSimpleItemView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <TextBlock Text="{Binding LastName}" FontWeight="Bold" Width="100"/>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

我在UserControl中需要做什么才能使它们水平包裹?

补充:即使我将usercontrol中的所有宽度和高度更改为Auto,它仍然会垂直堆叠......:

<UserControl x:Class="TestMvvmExample2341.Views.CustomerSimpleItemView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="Auto" Height="Auto"> …
Run Code Online (Sandbox Code Playgroud)

wpf xaml wrappanel

4
推荐指数
1
解决办法
4131
查看次数