簡體   English   中英

WPF數據綁定參數問題

[英]Wpf Data binding argument issue

我正在使用c#和wpf。

我對DataBinding有問題。 我有這個模型基類:

public class Media
{
  public string Text {get;set;}
  public List<string> Videos{get;set;}
  public List<string> Images{get;set;}
}

這是我的xaml代碼:

<Grid Height="500" Width="380">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <TextBlock Text="{Binding Text, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center" VerticalAlignment="Center"/>

    <Image Grid.Row="1" Source="{Binding Images[0], Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding Converter={StaticResource imageVisibilityConverter}}"/>

    <MediaElement Grid.Row="1" Source="{Binding Videos[0], Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding Converter={StaticResource videoVisibilityConverter}}"/>
</Grid>

在我的媒體列表視圖模型中,我的某些模型沒有任何視頻,而視頻為空(或沒有任何項目)。 在MediaElement的綁定源中,我放入了導致異常的視頻的[0]值。

例外:

System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'XXXX') from 'Videos' (type 'List`1'). BindingExpression:Path=Videos[0]; DataItem='Media' (HashCode=18855696); target element is 'MediaElement' (Name=''); target property is 'Source' (type 'Uri') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: index'

我想檢查視頻是否可用,如果不可用,則將Videos [0]設置為MediaElement source屬性,不要對此屬性設置任何內容。

任何幫助將不勝感激。

一般來說,如果您不得不在轉換器之類的東西中添加邏輯,則通常是一個很好的信號,表明您的視圖模型無法正常工作。 這是一個很好的例子,因為您直接使用模型,而根本不使用視圖模型。 綁定應該在沒有生成異常的情況下靜默失敗,這向我表明它是在您的轉換器中生成的。 如果您要在視圖中進行邏輯處理,那么我可能會放棄轉換器,而使用DataTrigger來代替,例如:

<Image Grid.Row="1">
        <Image.Style>
            <Style TargetType="Image">
                <Setter Property="Visibility" Value="Visible" />
                <Style.Triggers>
                     <!-- Hide when Images is null -->
                    <DataTrigger Binding="{Binding Images}" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Hidden" />
                    </DataTrigger>
                     <!-- Hide when Images[0] is null -->
                    <DataTrigger Binding="{Binding Images[0]}" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Hidden" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

我在這里對“可見性”進行操作,但是您也可以使用它僅在不為null時附加Source綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM