작동하지 않는 것 같습니다 때문에 부탁드립니다. FallbackValue는 MultiBinding과 어떻게 작동합니까?
우리는 다음과 같은 개체에 바인딩하고 가정 :public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
글쎄, 우리가 사용하는 경우이에 대한 MultiBinding 대체 값이 오른쪽 표시 될 것으로 생각된다?
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"/>
<Binding Path="Durr"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
결과가 그러나, 사실,의 "를". 심지어 DependencyProperty.UnsetValue
이 작동하지 않는 반환하는 바인딩을 강제 :
<TextBlock xmnlns:base="clr-namespace:System.Windows;assembly=WindowsBase"> <TextBlock.Text> <MultiBinding StringFormat="{}{0} to the {1}" FallbackValue="Not set! It works as expected!)"> <Binding Path="Hurr" FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" /> <Binding Path="Durr" FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" /> </MultiBinding> </TextBlock.Text> </TextBlock>
또한 주위의 모든 방법 흉상이었다 TargetNullValue와 같은 시도. 따라서 멀티 바인딩은 절대로 FallbackValue을 사용하지 않습니다. 이게 사실인가요, 아니면 제가 빠진 것이 있습니까?
은 조금 더 장난 그리고 내가 필요 컨버터는 UnsetValue를 반환 할 수 있다는 것을 발견 :
class MultiValueFailConverter : IMultiValueConverter
{
public object Convert(
object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
if (values == null ||
values.Length != 2 ||
values.Any(x=>x == null))
return System.Windows.DependencyProperty.UnsetValue;
return values;
}
public object[] ConvertBack(
object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Too complex hurt brain.");
}
}
그러나,이 더러운 더러운 해킹처럼 보인다. 나는 이런 시나리오가 프레임 워크에서 설명 될 것이라고 생각한다. 하지만 리플렉터에서는 아무것도 찾을 수 없습니다.
좋은 질문 !! – Chris