안녕하세요
일부 환경 변수에 따라 속성을 변경하려고하는데 datacontext의 각 컨트롤에 대한 속성을 만들지 않으려합니다. 따라서 변환기를 사용하는 것이 좋습니다. 컨트롤 이름에 따라 속성을 설정합니다. 목표는 모든 컨트롤에 대해 하나 개의 속성을 사용하는 것입니다WPF : 여러 컨트롤이 동일한 속성에 바인딩됩니다.
<Grid.Resources>
<local:NameToStringConverter x:Key="conv" />
</Grid.Resources>
<TextBlock Name="FordPerfect"
Text="{Binding ElementName="FordPerfect" Path=Name, Converter={StaticResource conv}, Mode=OneWay}"/>
<TextBlock Name="Arthur"
Text="{Binding ElementName="Arthur" Path=Name, Converter={StaticResource conv}, Mode=OneWay}"/>
<TextBlock Name="ZaphodBeeblebrox"
Text="{Binding ElementName="ZaphodBeeblebrox" Path=Name, Converter={StaticResource conv}, Mode=OneWay}"/>
및 ...
public class NameToStringConverter : IValueConverter
{
public object Convert(
object value, Type targetType,
object parameter, CultureInfo culture)
{
if (MyGlobalEnv.IsFlavor1 && ((string)value).Equals("ZaphodBeeblebrox")) return "42"
if (MyGlobalEnv.IsFlavor2 && ((string)value).Equals("ZaphodBeeblebrox")) return "43"
if (MyGlobalEnv.IsFlavor1 && ((string)value).Equals("Arthur")) return "44"
return "?";
}
public object ConvertBack(
object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
내가 더 나은 더 우아한 방법이있을거야 ... 어떤 아이디어?
나는 그것을 얻지 않는다. TextBox.Text를 "?"로 설정하려고합니다. 그 TextBox.Name == "6 * 9"를 제외하고는 "42"가 될 것입니다. ?? 그것을 할 수있는 많은 방법이 있으며, 대부분은 덜 혼란 스럽습니다. ('명백한'이라고 말할 것입니다 ...). 진정한 목표를 말씀해주세요! –
@Markus 2가 더 좋아? –