2017-04-05 3 views
2

Ist es möglich, ein TextBox Text Feld an eine Eigenschaft TextView in meinem Modell mit Modus OneWay zu binden, und binden Sie an eine andere Eigenschaft TextInput mit Modus OneWayToSource?OneWay und OneWayToSource separat binden?

dh. Wenn ich die Eigenschaft TextView in Code ändere, ändert sich der Inhalt des WPF-Steuerelements. Und wenn ich die TextBox eintippe, wird die Änderung in TextInput widergespiegelt.

Ich stimme zu, es ist nicht der richtige Weg, dies zu tun, aber in der Lage, dies zu tun würde mir jetzt eine Menge Arbeit ersparen.

+0

Vielleicht sollten Sie erklären, warum Sie das brauchen. Ich kann nicht sehen, warum das jetzt nützlich sein könnte ... – Pikoh

+1

Sie konnten TwoWay-bind nur eine Eigenschaft und unterschiedliche Unterstützungsfelder für 'get' und' set' verwenden. Scheint ein wenig hacky, obwohl ... – wkl

+0

@ Pikoh: Ich habe ein Modell mit vielen Eigenschaften, und ich muss einen Override-Mechanismus machen, so dass, wenn ein Benutzer etwas in das Textfeld eingibt, ich den ursprünglichen Wert irgendwo, damit der Benutzer bei Bedarf zu ihm zurückkehren kann. Ich möchte also keine 2-Wege-Bindung machen. –

Antwort

2

Ist es möglich, ein TextBox-Textfeld an eine Eigenschaft TextView in meinem Modell mit Modus OneWay zu binden und an eine andere Eigenschaft TextInput mit Modus OneWayToSource zu binden?

Nein. Sie können nur eine einzelne Bindung auf eine Zieleigenschaft anwenden.

Sie könnten einen Multikonverter verwenden, um den Wert mehrerer Eigenschaften in einen Zielwert zu konvertieren: https://blog.csainty.com/2009/12/wpf-multibinding-and.html.

Etwas wie folgt aus:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource MultiValueConverter}"> 
      <Binding Path="TextView" /> 
      <Binding Path="TextInput" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

public class NameMultiValueConverter : IMultiValueConverter 
{ 
    private string _textView; 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //display the value of TextView 
     _textView = values[0].ToString(); 
     return _textView; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     return new object[] { _textView, /* TextInput: */ value.ToString() }; 
    } 
} 

Alternativ könnten Sie die Konvertierungslogik in der Setter Ihrer Quelleigenschaft behandeln.

Verwandte Themen