2017-06-29 80 views
0

編輯設置默認值,如果綁定爲null

這不是字符串空值回退的副本。我正在尋求複雜類型的後備。

原來的問題

這是一個後續問題的問題,我昨天問過:

Bind WPF Command to ViewModel property in C# XAML

接受的答案給我的核心部分是這樣的:

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:SettingsPathSelectorViewModel}"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBox Text="{Binding SettingsPath}" /> 
      <Button 
       Content="..." 
       Command="{Binding OpenFile}" 
       HorizontalAlignment="Left" 
       MinWidth="40" 
       Margin="4,0,0,0" 
       /> 
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <StackPanel Orientation="Vertical"> 
     <Label>First Path</Label> 
     <ContentControl Content="{Binding FirstPath}" /> 
    </StackPanel> 
</Grid> 

A DataTemplate是爲自定義類型創建的, n a ContentControl被綁定到該類型的屬性。

現在的問題是,屬性(示例中的FirstPath)可能是null並且不呈現UI元素。我怎麼能做到從DataTemplate呈現的控制,即使該屬性是null

由於EVK建議我已經實現了一個轉換器:

public class PathSelectorConverter : IValueConverter 
{ 
    public object Convert(object o, Type type, object parameter, CultureInfo culture) 
    { 
     return o ?? new PathSelector(); 
    } 
    public object ConvertBack(object o, Type type, object parameter, CultureInfo culture) 
    { 
     return o ?? new PathSelector(); 
    } 
} 

我已經添加了轉換器,以資源的實例我的窗口:

<view:PathSelectorConverter x:Key="pathSelectorConverter"/> 

並將其添加在綁定的屬性:

但是,如果值不爲空

+0

你能不能確保它不是null而是? – Evk

+0

@Evk不幸的是沒有。我有一個可以選擇的元素列表,每個元素都有一個'FirstPath'屬性。如果元素List是空的,我有這種不希望的行爲。 –

+0

然後,您可以使用轉換器,如果提供的值爲null,將返回SettingsPathSelectorViewModel的某個默認實例。 – Evk

回答

3

我找到了答案,這個問題在我的另一個question(代碼是從克萊門斯)轉換器只叫:

<Window.Resources> 
    <model:PathSelector x:Key="FallbackPathSelector" /> 
</Window.Resources> 
... 

<ContentControl Content="{Binding MyPathSelector, 
          FallbackValue={StaticResource FallbackPathSelector}}"/> 
相關問題