1. 程式人生 > >WPF使用IMultiValueConverter實現多路繫結

WPF使用IMultiValueConverter實現多路繫結

定義MultiValueConvertor類

class MultiValueConvertor : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            int i1 = ToInt(values[0]);
            int i2 = ToInt(values[1]);
            return (i1 + i2).ToString();
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        private int ToInt(object value)
        {
            if (value == DBNull.Value || value == null || string.IsNullOrEmpty(value.ToString()))
            {
                return int.MinValue;
            }

            try
            {
                return System.Convert.ToInt32(value);
            }
            catch
            {
                return int.MinValue;
            }
        }

可以發現與單路繫結的方法差不多,只不過傳進來的value是個陣列。

前臺繫結程式碼

 <TextBlock x:Name="textBlock1" HorizontalAlignment="Left"
                   Margin="335,141,0,0" TextWrapping="Wrap" 
                    VerticalAlignment="Top" Height="43" Width="120">
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource MultiValueConverter}">
                    <Binding ElementName="textBox2" Path="Text"></Binding>
                    <Binding ElementName="textBox3" Path="Text"></Binding>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>

把textblock的Text屬性繫結到兩個textbox的Text屬性上,當我們在兩個textbox內輸入整數時,會傳入轉化器進行計算,並且在textblock中顯示運算後的結果。

需要注意的是在這裡有一個順問題,我們時先繫結的textbox2,所以說在轉換器中values[0]是對應的他的值。

結果展示